考虑在函数内部使用
看起来
请注意,这会得到预期的结果。
ggplot(...)
的情况。x <- seq(1,10,by=0.1)
df <- data.frame(x,y1=x, y2=cos(2*x)/(1+x))
library(ggplot2)
gg.fun <- function(){
i=2
plot(ggplot(df,aes(x=x,y=df[,i]))+geom_line())
}
if(exists("i")) remove(i)
gg.fun()
# Error in `[.data.frame`(df, , i) : object 'i' not found
i=3
gg.fun() # plots df[,3] vs. x
看起来
ggplot
在函数内没有识别出定义的变量 i
,但如果在全局环境中定义 i
,则可以识别。为什么会这样呢?请注意,这会得到预期的结果。
gg.new <- function(){
i=2
plot(ggplot(data.frame(x=df$x,y=df[,i]),aes(x,y)) + geom_line())
}
if(exists("i")) remove(i)
gg.new() # plots df[,2] vs. x
i=3
gg.new() # also plots df[,2] vs. x
aes_string
来传递参数吗? - Roman Luštrikaes(...)
; 我会选择第二种方式。我正在尝试理解发生了什么。这是一个错误吗?还是有一个很好的原因来解释这种行为?或者我只是做错了什么? - jlhoward