我正在尝试在R中创建我的第一个函数。该函数应该接收数据帧,数据帧中的x系列,数据帧中的y系列,以及绘制散点图。看起来很简单,但是当我尝试检查可选的布尔参数时遇到了麻烦。
plotScatterChart <- function(data,x,y,scale=y,line=FALSE) {
require(ggplot2)
data$x <- as.numeric(x)
data$y <- as.numeric(y)
plot <- ggplot(data, aes(x, y)) +
geom_point() + # aes(alpha=0.3,color=scale)
#scale_color_gradient(high="red")
if(line) {
plot <- plot + geom_smooth(method="lm")
}
ggsave(file="plot.svg", plot=plot, height=10, width=10)
return(plot)
}
plotScatterChart(data=iris,x=iris$Petal.Length,y=iris$Petal.Width,line=TRUE)
non-numeric argument to binary operator
欢迎提出改进此功能的其他建议。
答案 0 :(得分:26)
错误是因为+
之后的geom_point()
。删除它,它应该工作。
答案 1 :(得分:20)
克里斯托弗的回答是完全正确的。让我补充一点,ggplot
似乎也接受名单:
plot <- ggplot(data, aes(x, y)) +
list(
geom_point(),
aes(alpha=0.3,color=scale),
scale_color_gradient(high="red"),
NULL
)
不幸的是,与你可以编写[1, 2, 3, ]
的Python不同,构造list(1, 2, 3, )
在R中产生错误。这是最终NULL
的原因,ggplot2
被{{ 1}}。
另一种可能的解决方法是编写
plot <- ggplot(data, aes(x, y)) +
geom_point() +
#aes(alpha=0.3,color=scale) +
#scale_color_gradient(high="red") +
list()
最终的list()
应该保留到位以取消上一个+
符号的效果;否则就是无操作。
答案 2 :(得分:5)
在2.0.0版本中,ggplot2
获得了一个新的几何图形,geom_blank()
没有任何内容。
当它被放置为最后一层时,它可以用来避免这种类型的错误。
plot <- ggplot(data, aes(x, y)) +
geom_point() +
#aes(alpha=0.3,color=scale) +
#scale_color_gradient(high="red") +
geom_blank()
以这种方式使用geom_blank()
类似于@krlmlr's answer中使用list()
作为最后一层的解决方法。