2012-02-08 11 views
2
私は評価したい

との表現で一つの変数を評価= 7は平均してfの二つの変数

mean=7 
f <- expression(-(x-mean)^2/2) 

その後、新しい式を得る:

-(x-7)^2/2 

私はそれをどのように行うことができますか?ありがとう。

答えて

0

gsub?サイドノートで

avg <- 7 
f <- expression(-(x-avg)^2/2) 
f.new <- as.expression(gsub('avg',avg,f)) 

expression("-(x - 7)^2/2") 

、あなたは彼らがR機能に組み込まれているので、meanまたはdataような名前の変数を定義することは避けてください。

+0

ありがとうございました。私の表現は非常に長く、多くの変数があります。あなたの方法を試してみます。 – moli

+1

@ JoshO'Brienはもっと良いアプローチをしていると思います。しかし、 'gsub'を使うと、置き換える文字列が一意であり、他の文字列のサブ文字列でないことを確認してください。 – Tommy

+0

@トミー(+1ジョシュ)私は同意する傾向があります。 – Justin

2

これは片道です。

f <- as.call(f) 
eval(substitute(substitute(expr, list(mean=7)), list(expr= f))) 
# -(x - 7)^2/2() 

その建設は心曲げ感じている場合は、あなただけでは感じる必要はありません:Rマニュアルを書いても、人はあなたがここに"a puzzle"提起しました問題を呼び出します。

+0

+1代用品を2回使用してください。しかし、 'f <-quote( - (x-mean)^ 2/2))'はおそらく式を指定するより良い方法です... 'as.call'は'式(平均) 'で動作しません。 – Tommy

+0

@ Tommy - そうですね、その提案をすることを考えましたが、ここでコメントしてうれしいです。私は、そこにあるものさえも噛み砕くトンがあると考えました。それは短くて哀れで、熟考の時間の後にはまだ報われているように私にはコーンのように感じます。私はまだ 'f'が式ではなくコールでなければならない理由をまだ知りませんので、私はまだ「そこに」あるとは思えません;) –

+0

@Josh O'Brienあなたの返事をありがとう。 – moli

0

S-Plusでは、substitute関数の引数はevaluateで余分なものがありますので、簡単です。残念ながら、Rは...

# in S-Plus: 
x <- expression(-(x-mean)^2/2) 
substitute(x, list(mean=7), evaluate=TRUE) 
#-(x - 7)^2/2 

をその引数が不足している...あなたはJoshO'Brienが示唆@何のようなものに頼らなければなりません。これをRコアの機能要求として記録することを検討してください。