我正在尝试通过ggplot2软件包从数据库中绘制15个变量中的13个。但是,当我调用该函数时,出现与数据有关的错误。
代码是这样的:
dfplot.2 <- function(col)
{
df <- my.data[,2:14]
ln <- length(df)
for(i in 1:ln){
if(is.factor(df[,i])){
ggplot(data=df[,i],aes(names(df)[i])) + geom_bar(width =0.5,fill="blue", colour="black")
+ ggtitle(paste("Distribucion de",names(df)[i]))}
else{ggplot(data=df[,i], aes(names(df)[i])) + geom_histogram(fill="red", colour="black")
+ ggtitle(paste("Distribucion de",names(df)[i]))}
}
}
dfplot.2(my.data)
结果是:
错误:
data
必须是数据帧或fortify()
可强制执行的其他对象,而不是数字矢量。
但是以前我的数据库是使用as.data.frame(my.data)
函数转换为数据框的。
答案 0 :(得分:0)
@鲍里斯。如果您包含创建my.data的代码,我们也许可以弄清楚。
这里似乎发生了几件事。该函数在其父范围内引用数据结构。它不接受数据帧作为参数。该错误表明您可能不再在全局环境中使用my.data。
同时,建议您检查变量的数据类型,并查看ggplot2认为它是什么。以下功能可用于检查。在调用ggplot之前,将这些打印语句放入函数中。 head()命令将输出变量df中前几行。
print(class(df))
print(str(df))
print(head(df))
您可以在已安装的帮助页面上找到有关这些功能的更多信息。
?class
?str
?head
您的函数具有一个从未使用过的参数col。也许您打算将参数中的数据框传递给函数?
输出调试语句以揭示变量内容的编程技术称为跟踪。如果您发现您需要做很多事情,那么就值得考虑使用某种脚手架来打开和关闭这些print()语句。
一旦获得调试问题的答案,一些简短的痕迹(如我建议的痕迹)就很容易删除。这项研究非常有用,该技术可以帮助您找到许多自己的答案。祝你好运。