考虑以下两个功能:
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')
}
Run Code Online (Sandbox Code Playgroud)
Plotfun1完美地工作,打电话
plotfun1('red')
Run Code Online (Sandbox Code Playgroud)
产生两个漂亮的红色箱形图.但是打电话
plotfun2(4)
Run Code Online (Sandbox Code Playgroud)
产生错误消息:
因子中的错误(组,级别= 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')
}
Run Code Online (Sandbox Code Playgroud)
我只是想了解发生了什么.)
捕获本地环境并在绘图时使用它:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |