【问题标题】:ggplot inside a function: when does it not recognize arguments and when does it? [duplicate]函数内的ggplot:它何时不识别参数,何时识别? [复制]
【发布时间】: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的内部。

标签: r ggplot2


【解决方案1】:

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

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)

【讨论】:

  • 不错!是否可以将其包装为一个函数,例如 ggplot.local,一切都“正常工作”?
  • 这很有用,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多