2010-05-04 4 views
2

지금은 ggplot2을 사용하고 있으며 ggplot 개체에서 수식을 얻을 수있는 방법을 찾을 수 없습니다. summary(<ggplot_object>)으로 기본 정보를 얻을 수 있지만 완전한 수식을 얻으려면 보통 .Rhistory 파일을 통해 위아래로 빗질하고있었습니다. 그리고 이것은 새로운 그래프를 실험 할 때, 특히 코드가 조금 길어질 때 좌절하게됩니다 ... 그래서 역사 파일을 검색하는 것은 이것을 수행하는 매우 편리한 방법은 아닙니다 ... 더 효율적인 방법이 있습니까? 그냥 그림 :ggplot 객체에서 호출 반환

p <- qplot(data = mtcars, x = factor(cyl), geom = "bar", fill = factor(cyl)) + 
    scale_fill_manual(name = "Cylinders", value = c("firebrick3", "gold2", "chartreuse3")) + 
    stat_bin(aes(label = ..count..), vjust = -0.2, geom = "text", position = "identity") + 
    xlab("# of cylinders") + ylab("Frequency") + 
    opts(title = "Barplot: # of cylinders") 

나는 summary과 몇 가지 기본적인 정보를 얻을 수 있습니다

> summary(p) 
data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11] 
mapping: fill = factor(cyl), x = factor(cyl) 
scales: fill 
faceting: facet_grid(. ~ ., FALSE) 
----------------------------------- 
geom_bar: 
stat_bin: 
position_stack: (width = NULL, height = NULL) 

mapping: label = ..count.. 
geom_text: vjust = -0.2 
stat_bin: width = 0.9, drop = TRUE, right = TRUE 
position_identity: (width = NULL, height = NULL) 

하지만 난 그래프를 얻을에 입력 된 코드를 얻으려면. 나는 여기에 필수적인 것을 놓치고 있다고 생각한다 ... ggplot 객체로부터 전화를받을 길이 없다는 것은 불가능한 것처럼 보인다!

+0

나는'str()'과'dput' 둘 다'p'를 보았고 호출을 찾을 수 없었다. 가능하지 않을 수도 있습니다. –

+0

스크립트 파일 사용은 어떻습니까? R-GUI를 사용하고 있다면 쉽게 사용할 수 있습니다. 예 : File-> New는 새로운 빈 스크립트 파일을 엽니 다. 저장하지 않고, 스크립트 파일을 평가할 수 있습니다 (mac, command-E 또는 command-enter에서). – kohske

+0

kohske, 나는 GNU/Linux 배포판, Emacs + ESS를 사용하고 있는데 GUI가 전혀 없다는 사실을 알고있다. 적어도 "일반 GUI"는 아니지만 ...하지만 나에게 명확하지 않은 점은 : "스크립트 파일에서 무엇을 의미 했습니까?"''.Rhistory' 파일에서 전화를 걸 수있는 방법을 언급했는데, 그게 제가 찾던 것이 아닙니다 ...''ggplot2' 그룹에 내 행운을 시험해 보겠습니다. ... 이것은 확실히 편리한 기능처럼 보입니다 ... – aL3xa

답변

3

이 (있을 수 있습니다가)를 생성 한 코드에 ggplot2 개체에서 이동하실 수 없습니다.

+0

나는 당신에게서 이것을 듣기를 기다리고 있었다! =) 이것이 좋은 생각이라고 생각합니까? 나는이 기능이 새 릴리스에서 구현 된 것을 확실히보고 싶습니다 ... – aL3xa

+0

불행히도 많은 재 작성이 필요하기 때문에 목록에 있지만 매우 높지는 않습니다. – hadley

3

'expression()'을 사용하여 R 코드를 표현식으로 저장 한 다음 'eval()'로 평가할 수 있습니다. 예 :

p <- expression(qplot(data = mtcars, x = factor(cyl), geom = "bar", fill = factor(cyl)) + 
    scale_fill_manual(name = "Cylinders", value = c("firebrick3", "gold2", "chartreuse3")) + 
    stat_bin(aes(label = ..count..), vjust = -0.2, geom = "text", position = "identity") + 
    xlab("# of cylinders") + ylab("Frequency") + 
    opts(title = "Barplot: # of cylinders")) 

다음

eval(p)

플롯을 생성하지만 원래 코드는 여전히 표현으로 변수 'P'에 저장된다.

그렇게

p

는 우리가 시작한 일이다

expression(qplot(data = mtcars, x = factor(cyl), geom = "bar", 
    fill = factor(cyl)) + scale_fill_manual(name = "Cylinders", 
    value = c("firebrick3", "gold2", "chartreuse3")) + stat_bin(aes(label = ..count..), 
    vjust = -0.2, geom = "text", position = "identity") + xlab("# of cylinders") + 
    ylab("Frequency") + opts(title = "Barplot: # of cylinders")) 

을 생산하고 있습니다.

'eval()'은 parse()와 함께 텍스트로 구문 분석되는 경우 문자열을 표현식으로 평가할 수도 있습니다.

eval(parse(text='f(arg=value)')

+0

물론 할 수 있습니다. 문자열 (문자)도 충분해야합니다. 다음과 같은 것 :'s <- "rnorm (10)"; eval (구문 분석 (텍스트 = s))'. 그러나 분명히,'ggplot' 객체는리스트에'call' 엘리먼트를 가지지 않기 때문에 이것을 직접 할 방법이 없습니다. – aL3xa

+0

예. 하지만 ggplot이 반환하는 객체에 입력 내용을 저장하지 않으면이 같은 것이 유일한 옵션입니다. – wkmor1

+0

@ aL3xa. 제안한대로 eval()을 사용하는 다른 방법을 추가했습니다. – wkmor1

관련 문제