我是循环圈的新手,那里有些困难。我已经浏览过其他问题,但没有找到具体问题的答案。
因此,我们只需创建一个随机数据集,指定列名并将变量设置为字符:
d<-data.frame(replicate(4,sample(1:9,197,rep=TRUE)))
colnames(d)<-c("variable1","variable2","trait1","trait2")
d$variable1<-as.character(d$variable1)
d$variable2<-as.character(d$variable2)
现在,我定义要循环的向量。它对应于特征1和特征2:
trt.nm <- names(d[c(3,4)])
现在,我想在循环中对特征1和特征2(现在应该作为trt.nm中的列名称)应用以下模型:
library(lme4)
for(trait in trt.nm)
{
lmer (trait ~ 1 + variable1 + (1|variable2) ,data=d)
}
现在我得到可变长度不同的错误。怎么解释?
如果我对每个特征应用没有循环的模型,则会得到结果,所以我认为问题一定在循环中。
答案 0 :(得分:1)
trait
是一个字符串,因此您必须将其转换为公式才能使用;有关更多信息,请参见http://www.cookbook-r.com/Formulas/Creating_a_formula_from_a_string/。
尝试执行此操作(您必须添加打印语句或保存结果才能实际看到它的作用,但这将无错误运行):
for(trait in trt.nm) {
lmer(as.formula(paste(trait, " ~ 1 + variable1 + (1|variable2)")), data = d)
}
另一建议是使用列表,而改为使用lapply
或purrr::map
。祝你好运!