Вопрос по ggplot2, r – Локальные переменные в пределах aes

45

Я пытаюсь использовать локальную переменную вaes когда я заговор с ggplot. Это моя проблема, сводящаяся к сути:

xy <- data.frame(x=1:10,y=1:10)

plotfunc <- function(Data,YMul=2){
    ggplot(Data,aes(x=x,y=y*YMul))+geom_line()
}

plotfunc(xy)

Это приводит к следующей ошибке:

Error in eval(expr, envir, enclos) : object 'YMul' not found

Кажется, что я не могу использовать локальные переменные (или аргументы функции) вaes, Может быть, это происходит из-за содержанияaes выполняется позже, когда локальная переменная выходит из области видимости? Как я могу избежать этой проблемы (кроме использования локальной переменной внутриaes)?

Error: User Rate Limit Exceeded zhan2383
Error: User Rate Limit Exceeded baptiste
Error: User Rate Limit Exceededggplot2Error: User Rate Limit Exceeded PatrickT

Ваш Ответ

6   ответов
10

Error: User Rate Limit ExceededYMulError: User Rate Limit ExceededDataError: User Rate Limit Exceeded

plotfunc <- function(Data, YMul = 2){
    eval(substitute(
        expr = {
            ggplot(Data,aes(x=x,y=y*YMul)) + geom_line()
        }, 
        env = list(YMul=YMul)))
    }

plotfunc(xy, YMul=100)

Error: User Rate Limit Exceeded

substitute({ggplot(Data, aes(x=x, y=y*YMul))}, list(YMul=100))
Error: User Rate Limit ExceededI'veError: User Rate Limit Exceededbrowser()Error: User Rate Limit Exceededaes()Error: User Rate Limit Exceededsys.frames()Error: User Rate Limit ExceededYMulError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgithub.com/hadley/ggplot2/issues/248Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcustom codeError: User Rate Limit Exceeded
4

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

xy <- data.frame(x=1:10,y=1:10)

plotfunc <- function(Data,YMul=2){
  geom_line(aes(x=x,y=y*YMul))
}

ggplot(xy)+plotfunc(xy)
# Error in eval(expr, envir, enclos) : object 'YMul' not found

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

plotfunc <- function(Data,YMul=2){
  geom_line(aes_(x=Data$x,y=Data$y*YMul))
}
ggplot(xy)+plotfunc(xy)
# works
1

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

g <- function() {
  foo3 <- 4
  ggplot(mtcars, aes(x = wt + foo3, y = mpg),
         environment = environment()) +
    geom_point()
}

g()
# Works
Error: User Rate Limit Exceeded
5

ggplot()'s aes expects YMul to be a variable within the data data frame. Try including YMull there instead:

Error: User Rate Limit Exceededggplot()Error: User Rate Limit ExceededaesError: User Rate Limit ExceededYMulError: User Rate Limit ExceededdataError: User Rate Limit Exceeded

require("ggplot2")
xy <- data.frame(x = 1:10, y = 1:10)
xy <- cbind(xy, YMul = 2)

ggplot(xy, aes(x = x, y = y * YMul)) + geom_line()

Error: User Rate Limit Exceeded

plotfunc <- function(Data, YMul = 2)
{
    ggplot(cbind(Data, YMul), aes(x = x, y = y * YMul)) + geom_line()
}

plotfunc(xy)
Error: User Rate Limit Exceededggplot()Error: User Rate Limit ExceededYMulError: User Rate Limit Exceededggplot()Error: User Rate Limit Exceeded
YMulError: User Rate Limit Exceededggplot object is evaluated, which is global rather than in the function.<,/span> – Justin May 18 '12 at 20:40
Error: User Rate Limit Exceeded
37

Error: User Rate Limit Exceeded

xy <- data.frame(x=1:10,y=1:10)

plotfunc <- function(Data, YMul = 2){
    .e <- environment()
    ggplot(Data, aes(x = x, y = y*YMul), environment = .e) + geom_line()
}

plotfunc(xy)
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededy=1:10Error: User Rate Limit ExceededxyError: User Rate Limit Exceededy<-1:10Error: User Rate Limit Exceededy<-10:1Error: User Rate Limit Exceededggplot()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded fabb
0

Error: User Rate Limit ExceededYMulError: User Rate Limit ExceededggplotError: User Rate Limit Exceeded

YMul <- 2

plotfunc <- function(Data){
    ggplot(Data,aes(x=x,y=y*YMul))+geom_line()
}

plotfunc(xy)

Похожие вопросы