2017-11-07 6 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)