我正在使用包rethinking
,它具有功能map()
和map2stan()
執行貝葉斯估計(後者作爲rstan
的接口)。 map()
和map2stan()
採取公式的alist()
定義的可能性和先驗,如:如何將字符串拆分爲R中的alist()?
alist(
height ~ dnorm(mu, sigma),
mu ~ dnorm(178, 20),
sigma ~ dunif(0, 50)
)
它打印爲:
[[1]]
height ~ dnorm(mu, sigma)
[[2]]
mu ~ dnorm(178, 20)
[[3]]
sigma ~ dunif(0, 50)
我試圖探索先驗的影響,所以我想能夠通過不同的手段和標準偏差集。我可以先驗到像分號分隔字符串:
s <- "height ~ dnorm(mu, sigma); mu ~ dnorm(178, 20); sigma ~ dunif(0, 50)"
從中我想我應該能拆就;
並分配給alist()
。但我無法弄清楚這最後一步。
我已經試過的變化:
do.call("alist", unlist(strsplit(s,";")))
和
as.vector(unlist(strsplit(s,";")), mode = "alist")
前者失敗second argument must be a list
,後者因爲as.vector()
沒有一個 「ALIST」 模式。
也許更一般的問題是:我怎樣才能得到一個字符串到alist()
?我已閱讀this question中的答案,但我無法弄清楚如何針對此特定問題進行調整。
這完全適用於簡單的公式,這是無可否認我的例子是什麼。更多複雜的術語,比如'mu < - a [block] + bHeight * height',會失敗,因爲它試圖評估表達式。 'eval中的錯誤(expr,envir,enclos):找不到對象'a'。有關如何解決這個問題的任何想法? – kmm
@kmm - 如果你有一串表情作爲字符串,你有更大的魚來炒。 –