我正在使用包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 - 如果你有一串表情作为字符串,你有更大的鱼来炒。 –