2017-11-07 4 views
1

R의 수식 수정에 대한 질문이 있습니다.R 수식의 문자열 바꾸기

수식이 있다고 가정 해 보겠습니다. 나는 인용 부호 제외에 용어를 대체하려는 경우

> fo <- a ~ b + c 

나는

> pryr::substitute_q(fo, list(a = as.name('happy'))) 
happy ~ b + c 

지금은 이름으로의 대체 할 수 있습니다, substitute_q

> pryr::substitute_q(fo, list(a = 'happy')) 
"happy" ~ b + c 

를 사용하여 용어를 대체 할 수 있습니다 그러나, 나는 문자열이있는 수식이 있다고 말할 수 있습니다.

> fo <- 'a' ~ b + c 
> fo 
"a" ~ b + c 

수식에서 문자열을 대체 할 수있는 방법을 찾을 수 없습니다.

> pryr::substitute_q(fo, list(a = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list("a" = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list(`"a"` = as.name('happy'))) 
"a" ~ b + c 
> pryr::substitute_q(fo, list('"a"' = as.name('happy'))) 
"a" ~ b + c 

나는 항상 이름 공식 내를 교체하려고 즉, 대체를 수행 할 때 substitute_q는 환경 내에서 변수를 찾기 때문이라고 생각합니다. 문자 'a'를 대체 할 수있는 방법이 있습니까? 기본 R에서

+0

에 강요 deparse를 사용합니다. 'func1 (a, b) ~ func2 ("e", 10) + b * c + func3 (d)''reformulate'은 부족합니다. 이런 복잡한 경우에 적응할 수 있습니까? –

답변

0

는 문자로 공식 전환에 필요한 대체를 수행하고, 그래서이 제시 한 특정 경우에 작동 다시 d.b @ 공식

fo <- 'a' ~ b + c 
as.formula(gsub("\"a\"", "\"happy\"", deparse(fo))) 
#"happy" ~ b + c 

fo2 = func1(a, b) ~ func2("e", 10) + b * c + func3(d) 
as.formula(gsub("func2(\"e\", 10)", "func2(HAN, SOLO)", deparse(fo2), fixed = TRUE)) 
#func1(a, b) ~ func2(HAN, SOLO) + b * c + func3(d)