2014-05-14 4 views
3

좋은 아침, 나는 (곡선() 함수를 사용하여) 곡선을 플롯 할 R. 문자열과 표현 간의 형식 변환에 붙어식으로,

문자열에 의해 곡선()를 정의 다음과 같이 문자열로 정의됩니다.

curve(x^3) 
## Ok, generates a curve as expected 

qq<-"x^3" 
curve(qq) 
Error in UseMethod("qq") : 
no applicable method for 'qq' applied to an object of class "c('double', 'numeric')" 

저는 첫 번째 인수가 표현식으로 간주됩니다.

curve(expr=expression(qq)) 
Error in curve(expr = expression(qq)) : 
    'expr' must be a function, or a call or an expression containing 'x' 

이해가 수 : 표현()에 대한 이해는, 사람에서, 표현 "... 표현이 유형의 벡터 반환"이다 "인수 포함 (평가되지 않은)를."

문자열 qq의 내용으로 정의 된 방정식을 사용하여 곡선을 그리려면 어떻게해야합니까?

all.vars(substitute(expression(qq))) 
#[1] "qq" 

all.vars(substitute(x^3)) 
#[1] "x" 

I :

substitute(expression(qq)) 
#expression(qq) 

양식이 그것으로 필요 무엇을 추론 할 수 없습니다

감사

JF

답변

3

curve는 처음에 식을 대체 두려워 할 필요가 있다고 생각합니다 eval(parse()) :

x <- 1:10 
qq <- "x^3" 
ff <- as.function(alist(x=, eval(parse(text=qq)))) 
curve(ff) 
+0

실제로 솔루션이 작동합니다 (감사합니다!). 나는 아직도 내가 왜 그렇게하는지 확신 할 수 없다. 여기서 문자열을 함수로 변환하고 curve() 함수를 사용하여 함수를 처리합니다. 아무 문제가 없지만 왜 문자열 qq에서 표현식을 생성하여 curve()에 바로 사용할 수 없습니까? 나는 너무 많은 eval (parse())을 신경 쓰지 않지만 왜'curve (expr = eval (parse (text = qq)))'또는'curve (expr = parse (text = qq))'가 작동하지 않는지 ? – jfmoyen

+0

내 대답의 첫 문장을 읽으십시오. 'curve '문서 이해를위한 – Roland

+0

(+1) –