2011-04-01 5 views
8

나는이 문제를 해결할 수 없습니다.ggplot2에서 개체를 찾을 수 없습니다.

이 예제는 작동 :

gr.sc <- function(var.name.1, var.name.2) { 
    ggplot(results, aes(get(var.name.1), get(var.name.2))) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 
} 

gr.sc("sum.All", "sum.Empl") 

그리고이 오류가 무엇입니까 :

# Function with geom_density 

gr.den <- function(var.name) { 
    ggplot(results, aes(get(var.name), fill = name)) + 
    geom_density(alpha = 0.2) + 
    geom_vline(xintercept = tv[, var.name], color="red", size=1) + 
    xlab(var.name) 
} 

gr.den("sum.Empl") 

# Example with geom_point 

ggplot(results, aes(sum.All, sum.Empl)) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 

은 그 때 나는 geom_point를 사용하여 유사한 기능을 만들려고하고 있습니다. 왜?

Error in get(var.name.1) : object 'var.name.1' not found 
+1

재현 가능한 예를 제공하십시오. 코드를 실행하려면'results'와'tv'의 내용이 필요합니다. 'dput()'을 실행하고 질문에 결과를 붙여 넣으십시오. – Chase

답변

18

aes를 함수 내에서 사용하려는 경우 대신 aes_string을 사용하는 것이 좋습니다.

gr.sc <- function(var.name.1, var.name.2) { 
    ggplot(results, aes_string(x = var.name.1, y = var.name.2)) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 
} 

gr.sc("sum.All", "sum.Empl") 

HTH

+0

고마워요! 'aes_string'은 많은 도움이됩니다. 첫 번째 함수 인'gr.den'에서도 오류를 발견하고'aes_string'으로 해결했습니다. – djhurio

4

get 잘못된 환경을보고 있기 때문에 에러가 발생한다 (즉,하지 results 데이터 프레임 내부). 당신은 명시 적으로 get(var.name.1, envir = results)을 지정할 수 있습니다. 그러나 그것은 추악하고 끔찍한 코드 일 것입니다. Iselzer가 제안한대로 aes_string을 사용하는 것이 훨씬 좋습니다.

1

다음과 비슷한 문제가 발생했습니다. https://groups.google.com/forum/#!topic/ggplot2/_kKP4NNu3bc 여기서 aes_string은 작동하지 않습니다.

이 문제는 이후 버전의 ggplot2에서 해결 될 수 있습니다. 하지만 호환성을 위해 이전 버전의 ggplot2를 사용하고 있습니다. 빠른 해킹은 전역 변수로 함수 매개 변수를 설정하는 것입니다. 즉,

gr.sc <- function(var.name.1, var.name.2) { 
    var.name.1 <<- var.name.1 
    ... 
    ggplot(... 
    ... 
} 
관련 문제