我希望可以通过列编号而不是名称来指定模型的列,例如lm(bp~height+age, data=mydata)
。
我尝试过lm(mydata[[1]]~mydata[[2]]+mydata[[3]])
但问题在于:拟合模型中的系数被命名为mydata[[2]]
,mydata[[3]]
等,而我想要使用真正的列名称。
也许这是一个无法两全其美的情况,但如果专家们能够提供是否可能的建议,我将非常感激。
我希望可以通过列编号而不是名称来指定模型的列,例如lm(bp~height+age, data=mydata)
。
我尝试过lm(mydata[[1]]~mydata[[2]]+mydata[[3]])
但问题在于:拟合模型中的系数被命名为mydata[[2]]
,mydata[[3]]
等,而我想要使用真正的列名称。
也许这是一个无法两全其美的情况,但如果专家们能够提供是否可能的建议,我将非常感激。
lm(
as.formula(paste(colnames(mydata)[1], "~",
paste(colnames(mydata)[c(2, 3)], collapse = "+"),
sep = ""
)),
data=mydata
)
你可以使用任意数量的索引值(不需要for循环)来代替c(2,3)
as.formula
会更加健壮,虽然对于lm()
来说不是必需的(但对于其他模型可能需要)。 - Tomaspaste('\
',colnames(mydata)[c(2,3)],'`',sep =" ",collapse = "+")` - Evertvdwlm(mydata[,1] ~ ., mydata[-1])
我在一门关于R的课程中发现了一个技巧,就是删除响应列,否则你会收到警告“基本完美拟合:摘要可能不可靠”。我不知道为什么它起作用,它并没有在文档中说明。通常,我们会保留响应列。
Tomas提供的早期答案的简化版本:
lm(
as.formula(paste(colnames(mydata)[1], "~ .")),
data=mydata
)