2014-07-23 5 views
2

를 사용하여 함수 만들기 다음 요소 수에 대한은 어떤 이유로 ggplot2

Fruit <- c(rep("Apple",3),rep("Orange",5)) 
Bug <- c("worm","spider","spider","worm","worm","worm","worm","spider") 
Numbers <- runif(8) 
df <- data.frame(Fruit,Bug,Numbers) 

내가

Don't know how to automatically pick scale for object of type function. Defaulting to continuous 
    Error in eval(expr, envir, enclos) : object 'j' not found 

내가 두 번째에 대한 대부분 걱정 얻을

bar.plot <- function(dat,j,c){ 
ggplot(dat, aes(j, ..count..)) + 
geom_bar(aes(fill = c), position = "dodge") 
} 
bar.plot(df,Fruit,Bug) 

오류의 라인 Error in eval ... 왜 이런 일이 일어나는 지 아십니까? 나는 많은 막대 그래프를 만들어서이 기능이 내 인생을 훨씬 쉽게 만들어 줄 것입니다.

답변

4

ggplot의 비표준 평가 덕분에 그와 같은 심볼 이름을 ggplot 함수에 전달할 수 없습니다. aes은 실제로는 print() 플롯이 될 때까지 평가되지 않습니다. 이 이유는 무엇입니까

bb<-bar.plot(df,Fruit,Bug) 

같은 오류가 발생하지 않습니다. 그러나이 시점에서 함수 내에 존재하는 변수 j은 더 이상 존재하지 않습니다. aes() 표현식에서 값으로 사용할 데이터 열을 동적으로 지정하려면 aes_string을 사용해야합니다. 문자열이 아닌 심볼 이름을 전달할 수있게하려면 substitute을 사용하여 문자로 변환 할 수 있습니다. 예를 들어,이 작동

bar.plot <- function(dat,j,c){ 
    ggplot(dat, aes_string(x=substitute(j)), aes(y=..count..)) + 
    geom_bar(aes_string(fill = substitute(c)), position = "dodge") 
} 
bar.plot(df,Fruit,Bug) 

enter image description here