2012-02-09 17 views
1

関数に式を渡したいが、式の文字列から二重引用符を削除することはできない。どうすればいい?ありがとう。文字列の引用符を削除して式として作成する

clust_start=c(1,100) 
i <- 1 
Lambexp <- 1:99 
rank <- 1:99 
alpha <- 1:99 
d <- 1 
b <- 1:2 
ww=as.matrix(c(1:99), nrow=99) 
expression.logdens <- paste(Lambexp[rank[(clust_start[i]:(clust_start[i + 1] - 1))]],   
"*exp(", alpha[(clust_start[i]:(clust_start[i + 1] - 1))], " + bb*", ww[(clust_start[i]:  
(clust_start[i + 1] - 1)), d], " - ", b[d]*ww[(clust_start[i]:(clust_start[i + 1] - 1)),  
d], ")", sep="") 

expr.formula <- paste(expression.logdens, sep="", collapse=" + ") 

私はexpr.formula <みました - as.expression(expr.formula)とas.name(expr.formula)を、彼らは動作しませんでした。

logdens <- function(bb){ 
    y <- expr.formula  
     return(y) 
    } 
logdens(1) 
+0

@ジョランはい。私は、logdens関数全体をHIの関数腕()に渡したくない。遅すぎる。だから、計算結果をarms()に渡したいだけです。 – moli

+0

「遅い」を定義し、代替方法が最初に速くなるかどうかについてアドバイスできます。 –

+0

ところで、他の問題を無視して、 'call'と' do.call'を見てください。 –

答えて

4

あなたはこれをしたい:

logdens <- function(bb){ 
    eval(parse(text=expr.formula)) 
} 

出力:

> logdens(1) 
[1] 1.539673e+45 
+0

それは動作します。私はこのlogdens関数をHIパッケージのarms()にポーズする必要があるので、eval()を使うことはできません.bbはarms()のサンプルを使用します。ありがとう。 – moli

+0

申し訳ありませんが、私はかなり理解していません。 – jbaums

+0

ありがとうございます。私は自分の質問を修正しました。 – moli

0

あなたの数式が実際に有効であることを修正したら、それは... as.formula(expr.formula)と同じくらい簡単です;)

関連する問題