编写图形函数时可变范围的问题

时间:2014-12-25 17:08:54

标签: r ggplot2

在我尝试编写脚本的问题上,' kmeans.R'但是我收到有关未找到变量的错误。只在我尝试创建图形的函数中引发错误,而不是返回数据帧。这是返回后续数据框和图形所需参数的函数:

simulations <- function(nrow, ncol){
  # Generate continuous normally distributed variables.
  dataCont <- data.frame(matrix( 
    rnorm(nrow*ncol, mean=0,sd=1), nrow, ncol))

  # Generate categorical normally distributed variables.
  dataCat <- data.frame(matrix(
    rnorm(nrow*ncol, mean=0,sd=1), nrow, ncol))
  dataCat[dataCat <= 0] <- 0
  dataCat[dataCat > 0] <- 1

  # return values
  return(list(dataCont= dataCont, dataCat= dataCat))
}

这是一个接受来自simulations()的参数的函数示例。

getKmeans <- function(dataCont, dataCat, dataOut){
    # Continuous variables
    cont <- kmeans(dataCont, centers = 3, iter.max= 100, 
                   algorithm="Hartigan-Wong")

    # Categorical variables
    cat <- kmeans(dataCat, centers = 3, iter.max= 100,
                  algorithm="Hartigan-Wong")

    # Categorical as outliers
    catout <- kmeans(dataOut, centers = 3, iter.max= 100,
                     algorithm="Hartigan-Wong")
    return(list(cont= cont,
                cat= cat,
                catout= catout))
}

以下我将如何从&#39; kmeans.R&#39;中调用getKmeans()。它接受来自simulations()的参数而没有问题:

kmResults <- getKmeans(dataCont= sim$dataCont,
                       dataCat= sim$dataCat,
                       dataOut= dataOut)

但是,当我使用以下函数创建一些散点图时:

scatterplots <- function(dataCont, dataCat, dataOut){
## Various scatterplots for generated data

  ggplot(dataCont)+
    ggtitle("Continuous normally distributed variables") +
    geom_point(aes(x=dataCont$X1, y=dataCont$X2), size=3)
  ggsave("plots/cont_scatter.png", width=4, height=4, dpi=100) #plot 1

  # scatterplot for categorical normally distributed vars.
  ggplot(dataCat)+
    ggtitle("Categorical normally distributed variables") +
    geom_point(aes(x=dataCat$X1, y=dataCat$X2), size=3)
  ggsave("plots/cat_scatter.png", width=4, height=4, dpi=100) #plot 2

 # scatterplot for categorical outliers 
 ggplot(dataOut)+
    ggtitle("Categorical variables with outliers") +
    geom_point(aes(x=dataOut$X1, y=dataOut$X2), size=3)
 ggsave("plots/cat_scatter.png", width=4, height=4, dpi=100) #plot 3
}

然后R引发一个错误,指出&#34; object&#39; dataCont&#39;找不到&#34;。我遇到的唯一解释是变量范围存在问题。这并没有多大意义,因为只有当我调用一个生成一些图形的函数(使用ggplot2)时才会引发错误。

您能否帮我理解解决此问题的最佳方法?谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

范围界定问题与您在aes()中指定变量的方式有关。在使用some_data_frame$some_variable时,您不能使用some_variable,只需ggplot2使其符合条件。这应该可以解决问题:

scatterplots <- function(dataCont, dataCat, dataOut){
## Various scatterplots for generated data

  ggplot(dataCont)+
    ggtitle("Continuous normally distributed variables") +
    geom_point(aes(x=X1, y=X2), size=3)
  ggsave("plots/cont_scatter.png", width=4, height=4, dpi=100) #plot 1

  # scatterplot for categorical normally distributed vars.
  ggplot(dataCat)+
    ggtitle("Categorical normally distributed variables") +
    geom_point(aes(x=X1, y=X2), size=3)
  ggsave("plots/cat_scatter.png", width=4, height=4, dpi=100) #plot 2

 # scatterplot for categorical outliers 
 ggplot(dataOut)+
    ggtitle("Categorical variables with outliers") +
    geom_point(aes(x=X1, y=X2), size=3)
 ggsave("plots/cat_scatter.png", width=4, height=4, dpi=100) #plot 3
}