Rはまったく新しいので、これに対する答えを見つけようとしていますが、質問の言い方がわからない可能性があるため、以前に質問されたことがある場合は申し訳ありません。
関数/モデルのリストを、手動で行うのではなく、forループでデータに適合させたいと思います。そのためには、でモデルを指定する必要があります。alist
以下をリストしてください。
flist <- alist(y ~ dnorm(mu, sigma),
mu <- a + b*x, # need to replace this line with general function
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10)
)
これをforループで行うにはa + b*x
、実行時に選択された関数の本体に置き換えることができる必要があります。だから私はそれを作ることを考えていました:
flist <- alist(y ~ dnorm(mu, sigma),
mu <- body(function[i]),
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10)
)
ただし、alistは実際には評価していないようでbody(function[i])
、これはのポイントの一部のようですalist
。実行時に体を取り出す方法はありますか?
基本的に、私が求めているのは、リスト内の式の一部(body(...))を評価することですが、すべてではありません(〜/ <-演算子を未評価のままにします)。
でこれを行うことは可能parse
ですか?
理解できるかわかりませんが、こんなものが必要ですか?
funs <- list(f1 = function(x) x + 3, f2 = function(x) 2 * x + 2)
flist <- alist(y ~ dnorm(mu, sigma),
mu <- FUN_BODY, # need to replace this line with general function
a ~ dnorm(0, 100),
b ~ dnorm(0, 10),
sigma ~ dunif(0, 10))
flist[[2]] <- eval(substitute(substitute(ARG,
list(FUN_BODY = body(funs[[2]]))),
list(ARG = flist[[2]])))
# [[1]]
# y ~ dnorm(mu, sigma)
#
# [[2]]
# mu <- 2 * x + 2
#
# [[3]]
# a ~ dnorm(0, 100)
#
# [[4]]
# b ~ dnorm(0, 10)
#
# [[5]]
# sigma ~ dunif(0, 10)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加