【发布时间】:2013-07-19 09:23:43
【问题描述】:
考虑以下两个函数:
library(ggplot2)
testdata <- as.data.frame(cbind(rep(c(1, 4), each = 50), rbinom(100, 50, .5)))
names(testdata) <- c("group", "value")
plotfun1 <- function(color) {
ggplot(data = testdata, aes(x = factor(group, levels = c(0: 4)), y = value)) +
geom_boxplot(color = color)
}
plotfun2 <- function(number) {
ggplot(data = testdata, aes(x = factor(group, levels = c(0: number)), y = value)) +
geom_boxplot(color = 'red')
}
Plotfun1 完美运行,调用
plotfun1('red')
产生两个漂亮的红色箱线图。然而调用
plotfun2(4)
产生错误信息:
因子错误(组,级别 = c(0:数字)):找不到对象“数字”
显然在某些情况下 ggplot 无法“找到”函数的参数,在某些情况下确实如此。这是怎么回事?
PS 我知道有一个简单的解决方法:
plotfun3 <- function(number) {
plotdata <- testdata
plotdata$group <- factor(plotdata$group, levels = c(0: number))
ggplot(data = plotdata, aes(x = group, y = value)) +
geom_boxplot(color = 'red')
}
我只是想了解发生了什么。)
【问题讨论】:
-
类似于stackoverflow.com/q/5106782/946850,但不是重复的。
-
啊,是的,我只在发布此问题时发现了另一个问题。显然,函数之间的区别在于,在 plotfun1 中,我们在 aes 中调用参数?
-
是的,可能是这个原因,但原因在于
ggplot的内部。