我正在尝试在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
欢迎提出改进此功能的其他建议.
在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的答案,它使用list()
的最后一层.
克里斯托弗的回答是完全正确的.让我补充说,ggplot
似乎也接受列表:
plot <- ggplot(data, aes(x, y)) + list( geom_point(), aes(alpha=0.3,color=scale), scale_color_gradient(high="red"), NULL )
不幸的是,与你可以编写的Python不同[1, 2, 3, ]
,这个结构list(1, 2, 3, )
在R中产生了一个错误.这就是结果的原因NULL
,我很高兴被忽略了ggplot2
.
另一种可能的解决方法是编写
plot <- ggplot(data, aes(x, y)) + geom_point() + #aes(alpha=0.3,color=scale) + #scale_color_gradient(high="red") + list()
决赛list()
应该留在原地以取消最后一个+
星座的影响; 否则就是无操作.
这个错误是因为尾部的+
后geom_point()
.删除它,它应该工作.