函数内部的ggplot:什么时候不识别参数,什么时候识别它?

时间:2013-07-19 09:23:43

标签: r ggplot2

考虑以下两个功能:

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') 
}

我只是想了解发生了什么。)

1 个答案:

答案 0 :(得分:8)

捕获本地环境并在绘图时使用它:

plotfun2 <- function(number) {
localenv <- environment()
  ggplot(data = testdata, aes(x = factor(group, levels = c(0:number)), y = value), environment = localenv ) + 
    geom_boxplot(color = 'red') 
}

plotfun2(4)