对于为数据帧中的每个列运行lmer模型的循环,给出;可变长度不同“;错误(R)
我试图运行一个for循环,将数据帧中的每一列插入lme4::lmer()模型语法,并将结果附加到列表中,例如对于为数据帧中的每个列运行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),
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