【发布时间】:2016-08-29 17:49:48
【问题描述】:
我正在使用包rethinking,它有一个函数map() 和map2stan() 来执行贝叶斯估计(后者作为rstan 的接口)。 map() 和 map2stan() 采用 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 中的答案,但我不知道如何针对这个特定问题进行调整。
【问题讨论】: