我有一个包含10000行和12列的大数据帧(discountdataset)。 列包含不同的变量。前210行代表主题1(还有一列" subject1"),接下来的210行代表主题2,依此类推。
我想使用jags和循环函数来遍历数据框中的所有52个主题,并为每个主题分配一个函数。我的代码如下所示:
#subsetting the dataframe by the variable subjectid
subsetdiscount <- split(discountdataset, as.factor(discountdataset$subjectid))
这里我的计划是循环并将以下jags函数分配给子集中的所有主题),但是,它不起作用。我认为我的错误是我想传递给jags的变量"nt", "Choice"
没有正确定义,或者没有更新。
library(rjags)
for (i in 1:length(subsetdiscount))
{
nt <- nrow (subsetdiscount)
Choice <- subsetdiscount$choice
amountSS <- subsetdiscount$val_basic
amountLL <- subsetdiscount$val_d
delayDIFF <- subsetdiscount$delay
con <- subsetdiscount$condition
data <- list("nt", "Choice", "amountSS", "amountLL", "delayDIFF", "con") # to be passed on to JAGS
myinits <- list(
list(k = (c(0.01, 0.01))),
list(temp = (c(6, 6))))
parameters <- c("k", "temp")
samples <- jags(data, inits=myinits, parameters,
model.file ="singlesubmodel_Ben_roundedchoice.txt", n.chains=2, n.iter=20000,
n.burnin=1, n.thin=1, DIC=T)
答案 0 :(得分:0)
尝试:
library(rjags)
library(R2jags)
subsetdiscount <- split(discountdataset, as.factor(discountdataset$subjectid))
output_models <- lapply(subsetdiscount, function(x) {
nt <- nrow(x)
Choice <- x$choice
amountSS <- x$val_basic
amountLL <- x$val_d
delayDIFF <- x$delay
con <- x$condition
data <- list("nt", "Choice", "amountSS", "amountLL", "delayDIFF", "con") # to be passed on to JAGS
myinits <- list(list(k = (c(0.01, 0.01))),
list(temp = (c(6, 6))))
parameters <- c("k", "temp")
samples <- jags(data, inits=myinits, parameters,
model.file ="singlesubmodel_Ben_roundedchoice.txt",
n.chains=2, n.iter=20000,
n.burnin=1, n.thin=1, DIC=T)
return(samples)
})
output_models
应该是一个列表,其中包含您拆分主数据集的每个因子的输出。
请注意,如果没有任何提供的数据,很难对其进行测试。因此,如果这不起作用,您可能需要提供一些数据进行测试。
我希望它有所帮助。