对于为数据帧中的每个列运行lmer模型的循环,给出;可变长度不同“;错误(R)

对于为数据帧中的每个列运行lmer模型的循环,给出;可变长度不同“;错误(R),r,list,for-loop,lme4,R,List,For Loop,Lme4,我试图运行一个for循环,将数据帧中的每一列插入lme4::lmer()模型语法,并将结果附加到列表中,例如 list_results_univariate <- list() for (i in names(my_dataset)) { resultmodel <- lmer(y_variable ~ i + i*timevar1 + i*timevar2 + (1|Date) + (1|Location),

我试图运行一个for循环,将数据帧中的每一列插入lme4::lmer()模型语法,并将结果附加到列表中,例如

list_results_univariate <- list()

for (i in names(my_dataset))
  
  {
  
  resultmodel <- lmer(y_variable ~ 
         i + i*timevar1 + i*timevar2 + 
         (1|Date) + (1|Location), 
       data= my_dataset)
    
  tidy_resultmodel <- tidy_lmer(resultmodel)  
  
  list_results_univariate[[i]] <- tidy_resultmodel
    
  }    
数据集不包含NAs,也不包含单级因素,因为我已经删除了这些因素。如果我从迭代的名称列表中删除timevar1、timevar2、日期和位置,它仍然返回相同的错误


如何在不手动编写每个变量的模型的情况下运行此操作?

您的公式直接包含
I
,这意味着
lmer
希望在数据集中找到一个名为
I
的列。您的
i
变量的长度为1(字符串列名),但
lmer
要求变量的长度等于
y_变量的长度,因此会显示错误消息

在循环中,您应该创建一个计算
i
其基础值的公式,然后在
lmer
中使用该公式。例如:

library(lme4)

dat <- data.frame(id = sample(c("a", "b", "c"), 100, replace=TRUE),
                  y = rnorm(100),
                  x = rnorm(100),
                  w = rnorm(100),
                  z = rnorm(100))

# this errors
for (i in c("x", "w", "z")) {
  lmer(y ~ i + (1 | id), data=dat)
}

# this works
models <- list()
for (i in c("x", "w", "z")) {
  f <- formula(paste("y~(1|id)+", i))
  models[[i]] <- lmer(f, data=dat)
}
库(lme4)

dat您的公式直接包含
i
,这意味着
lmer
希望在数据集中找到一个名为
i
的列。您的
i
变量的长度为1(字符串列名),但
lmer
要求变量的长度等于
y_变量的长度,因此会显示错误消息

在循环中,您应该创建一个计算
i
其基础值的公式,然后在
lmer
中使用该公式。例如:

library(lme4)

dat <- data.frame(id = sample(c("a", "b", "c"), 100, replace=TRUE),
                  y = rnorm(100),
                  x = rnorm(100),
                  w = rnorm(100),
                  z = rnorm(100))

# this errors
for (i in c("x", "w", "z")) {
  lmer(y ~ i + (1 | id), data=dat)
}

# this works
models <- list()
for (i in c("x", "w", "z")) {
  f <- formula(paste("y~(1|id)+", i))
  models[[i]] <- lmer(f, data=dat)
}
库(lme4)
dat