Рассмотрите это использование ggplot(...)
внутри функции.Определение переменных в aes (...) внутри функции в 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' передать аргументы? –
@ RomanLuštrik - Спасибо, но я никогда не буду использовать 'aes (...)' like this; Я бы сделал это вторым способом. Я пытаюсь понять, что происходит. Это ошибка? Или есть веская причина такого поведения? Или я просто делаю что-то неправильно? – jlhoward
Это может быть связано с моей проблемой? http://stackoverflow.com/questions/23482036/ggplot-inside-function-treating-subsetdf-differently-resulting-geom-step-is-w Я попробовал ваш подход там, но не решил его. – smci