遍历对应于数据框列的字符串向量时的不同可变长度
Different variable lengths when looping over a string vector which corresponds to data frame columns
我是写循环的新手,在这方面遇到了一些困难。我已经查看了其他问题,但没有找到我的具体问题的答案。
所以让我们创建一个随机数据集,给出列名并将变量设置为字符:
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)
现在我定义我想要循环的向量。对应trait 1和trait 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)
}
现在我收到变量长度不同的错误。这怎么解释?
如果我为每个特征应用没有循环的模型,我会得到一个结果,所以我认为问题必须在循环中的某个地方。
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
代替。祝你好运!
我是写循环的新手,在这方面遇到了一些困难。我已经查看了其他问题,但没有找到我的具体问题的答案。
所以让我们创建一个随机数据集,给出列名并将变量设置为字符:
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)
现在我定义我想要循环的向量。对应trait 1和trait 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)
}
现在我收到变量长度不同的错误。这怎么解释?
如果我为每个特征应用没有循环的模型,我会得到一个结果,所以我认为问题必须在循环中的某个地方。
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
代替。祝你好运!