遍历与数据帧列对应的字符串向量时,不同的可变长度

时间:2018-12-18 12:41:42

标签: r string for-loop lme4

我是循环圈的新手,那里有些困难。我已经浏览过其他问题,但没有找到具体问题的答案。

因此,我们只需创建一个随机数据集,指定列名并将变量设置为字符:

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)
}

现在我得到可变长度不同的错误。怎么解释?

如果我对每个特征应用没有循环的模型,则会得到结果,所以我认为问题一定在循环中。

1 个答案:

答案 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)
}

另一建议是使用列表,而改为使用lapplypurrr::map。祝你好运!