在我尝试编写脚本的问题上,' 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)时才会引发错误。
您能否帮我理解解决此问题的最佳方法?谢谢你的时间。
答案 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
}