我在一个包含列表列表的数据集上运行lmer
函数时遇到了困难。
lapply(list, function(x) lapply(x, function(x) as.data.frame(x)))
lapply(list, function(x) lapply(x, function(x)
lmer(x[,4:7] ~ var + (1| id), x)))
model.frame.default(data = x,drop.unused.levels = TRUE,formula = x[,:变量“x”的类型(列表)无效
有没有人能建议通过lapply
运行lmer
的方法?
复制
library(tidyverse)
library(readxl)
require(writexl)
write_xlsx(mtcars, 'PQ_ele_com.xlsx')
dir = c('com', 'set', 'rit')
init = c('PQ', 'MG')
inpst = c('_ele_', '_mel_', '_col_')
for (i in dir) {
for (j in init) {
for (k in inpst){
write_xlsx(mtcars, paste0(j, k, i, '.xlsx'))
}
}
}
files = list.files(recursive= FALSE, full.names= FALSE)
init = c('PQ', 'MG')
dir = c('com', 'set', 'rit')
list3 = NULL
for (j in init){
for (k in dir){
df=c()
for (i in files){
if(str_detect(i, pattern = j) & str_detect(i, pattern = k)) {
df=rbind(df,read_excel(i))}
}
list3[[j]][[k]] = df
}
}
让我们假设我想通过每个子列表拟合lmer
模型。例如:
lapply(list3, function(x) lapply(x,
function(x) lmer(x[,3:7] ~ vs + (1| cyl), x)))
它返回报告的错误。你认为有可能以某种方式强制它吗?
1条答案
按热度按时间6mzjoqzu1#
你不能把一个矩阵放在公式的左边,然后期望
lmer
依次用每一列作为响应来拟合一系列模型(这对lm()
有效,但只是因为线性模型的拟合和解释方式有一些特殊的结构)。所以,你需要在底层使用另一个
lapply()
或循环来迭代列/响应变量。下面的代码是一种方法。说实话,我可能会在这里使用for
循环,它们比嵌套的lapply()
函数更容易调试...