2010-12-29 7 views
16
ggplot2 ggplot2에서 공백이있는 변수 이름을 어떻게 참조 할 수 있습니까?

공백이있는 변수 이름을 참조하는 방법은 무엇입니까?

인용 부호가있는 변수 이름에 qplot()ggplot()을 사용하면 왜 깨지나요?

예를 들어,이 작품은 :

qplot(x,y,data=a) 

그러나 이것은하지 않습니다 :

qplot("x","y",data=a) 

나는 종종 이름에 공백이있는 데이터 매트릭스가 있기 때문에 물어. 예 : "주 수입". ggplot2에는 데이터 프레임이 필요합니다. 좋아, 나는 개종 할 수있어. 그래서 같은 것을 시도하고 싶습니다 :

qplot("State Income","State Ideology",data=as.data.frame(a.matrix)) 

그게 실패합니다.

기본 R 그래픽에서는 다음과 같이 할 수 있습니다.

plot(a.matrix[,"State Income"],a.matrix[,"State Ideology"]) 

어느 것이 작동할까요?

어떤 아이디어?

+9

보십시오 "상태 소득"-보십시오 backticks – hadley

+0

참고를 위해, 나는 진짜 문제를 나타 내기 위하여 질문을 다시 정리했다. –

+6

해들리의 의견이 StackOverflow 주석의 가격 인하로 인해 중단되었다고 생각합니다. \ '주 수입 \'과 같이 보일 것입니다. –

답변

21

답 : 'X'와 'Y'는 길이-한 문자 벡터가 아닌 변수 이름으로 간주되기 때문에. 여기에서 R에 공백이있는 변수 이름을 사용하는 것이 현명하지 않은 이유를 알 수 있습니다.

는 hadleys 솔루션

a.matrix <- matrix(rep(1:10,3),ncol=3) 
colnames(a.matrix) <- c("a name","another name","a third name") 

qplot(`a name`, `another name`,data=as.data.frame(a.matrix)) # backticks! 

또는 중 하나를 사용할 수 있습니다, 공백으로 변수 이름을 참조하려면 더 공식적인 후자는 당신이의 이름을 전달 구조에서 사용할 수있는

qplot(get('a name'), get('another name'),data=as.data.frame(a.matrix)) 

루프 구조에서 문자열로 변수 :

for (i in c("another name","a third name")){ 
    print(qplot(get(i),get("a name"), 
     data=as.data.frame(a.matrix),xlab=i,ylab="a name")) 
    Sys.sleep(5) 
} 

그래도 최상의 해결책은 아닙니다. 공백이있는 변수 이름을 사용합니다. get를 사용

+0

감사합니다. 이것은 훌륭하게 작동하고, "get"과 루핑에 대한 팁은 깔끔합니다. 필자의 유일한 단서는 공백이있는 이름은 작업하기가 더 까다 롭지 만 종종 쉽게 읽을 수 있으며 종종 이름을 바꾸지 않고 LaTeX 코드로 전달할 수 있다는 것입니다. – bshor

3

실제로 내가 반대를 주장보다 "공식적인"하지 않습니다. 은 R 도움 (help("`"))을 말한다, 당신은 거의 항상 을 인용거야 제공 공백이 포함 된 변수 이름을 사용할 수 있습니다. (일반적으로는 역 따옴표로, 이미 제안했다.) 유사한

2

뭔가가이 게시물에 링크 ggplot2 메일 링리스트와 메멧 Gültaş에 요청했다. 문자열을 사용하여 ggplot 호출을 구성하는 또 다른 방법은 aes_strings 함수를 사용하는 것입니다. 공백이있는 변수에 대해 작업하려면 따옴표 안에 백틱을 넣어야합니다.

library(ggplot2) 

names(mtcars)[1] <- "em pi dzi" 

ggplot(mtcars, aes_string(x = "cyl", y = "`em pi dzi`")) + 
    theme_bw() + 
    geom_jitter() 
관련 문제