子集列表和R中的列表循环

时间:2019-06-02 16:53:22

标签: r

我正在执行一些分析,在这些分析中,我必须使用数据帧列表作为输入。该软件使用数据集列表作为进行多次插补的输出。但是,我希望能够使某些分析自动化。例如,以下一些玩具数据可以说明我的问题:

a <- rnorm(10, 0, 1)
b <- rnorm(10, 0, 1)
c <- rep(c("a","b"),5)
data <- cbind.data.frame(a,b,c)
mylist <- list(data, data)
mylist

因此mylist包含两个数据集。这些是我正在使用brms运行的贝叶斯模型的输入:

require(brms)
library(brms)
brm_multiple(a ~ b, data=mylist, cores =2)

在这里,brms从多个数据集中合并后验对象。我有两个问题:

  1. 如何对列表进行子集化,以便仅对变量“ c”的“ a”行运行模型。也就是说,我想在a ~ b时拟合模型data$c == a

  2. 接下来,有没有一种方法可以遍历变量“ c”的值并存储变量每个级别的估计值?也就是说,使过程自动化,以便在a ~ b时得到data$c == a,然后在data$c == b等时得到,然后将估计值保存在矩阵中?

1 个答案:

答案 0 :(得分:0)

a <- rnorm(10, 0, 1)
b <- rnorm(10, 0, 1)
c <- rep(c("a","b"),5)
data <- cbind.data.frame(a,b,c)
mylist <- list(data, data)
mylist



modelfunction <- function(dflist) {
  resultlist <- list()
  modelvars <- as.character(unique(dflist[[1]]$c))
  for(i in 1:length(modelvars)) {
    subsetdf <- lapply(dflist, function(x) x[x$c == modelvars[[i]], ])
    model <- brm_multiple(a ~ b, data=subsetdf, cores =2)
    resultlist[[i]] <- model 
  }
  return(resultlist)
}

modelfunction(mylist)

我为此编写了一个函数。为data.frame列表中的变量“ c”中的每个唯一类别动态子集,并将每个模型存储在列表中。