我目前正在使用R进行回归和分类。
因此,我使用类似于X ~ Y
的公式来进行有关X的预测。
我现在正尝试在for循环内使用函数来对代字号X侧的不同值和Y侧的常数进行多个预测。像这样:
X1 ~ Y
X2 ~ Y
X3 ~ Y
,其中X1,X2,X3和Y都是数据列(data $ X1 <-a,data $ X2 <-b,data $ X3 <-c,data $ Y),如果这很重要
那么如何在〜 -Expression中动态选择一个变量?我已经尝试过类似的方法,但是它不起作用:
# referring to "iris" data set with columns (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species)
getFormula <- function(variable){
variable ~ Sepal.Length + Sepal.Width + Species
}
petal.length.formula <- getFormula(Petal.Length)
petal.width.formula <- getFormula(Petal.Width)
我明白了:
petal.length.formula: variable ~ Sepal.Lenght + Sepal.Width + Species
petal.width.formula: variable ~ Sepal.Lenght + Sepal.Width + Species
但我想实现这一目标:
petal.length.formula: Petal.Length ~ Sepal.Lenght + Sepal.Width + Species
petal.width.formula: Petal.Width ~ Sepal.Lenght + Sepal.Width + Species
由于我在Y侧有40多个变量,在X侧有10个变量,因此手动键入每个公式真的很麻烦。 有人可以帮我解决这个问题吗?
我找不到类似的问题,因为我很难弄清楚要用来查找有关此内容的关键字。
如果可能的话,我不愿使用任何其他库,因为我是R的新手,并且想先弄清楚R的基本原理。
由于英语不是我的母语,所以我希望您能理解我的问题,如果需要,我当然乐于进一步解释。预先感谢您的宝贵时间!
答案 0 :(得分:0)
您可以尝试此操作,您需要将字符传递给变量。这样比较容易,如果X端有10个变量,则可以轻松地遍历它们:
getFormula <- function(variable){
as.formula(paste(variable,"~ Sepal.Length + Sepal.Width + Species"))
}
petal.length.formula <- getFormula("Petal.Length")
petal.width.formula <- getFormula("Petal.Width")
lm(petal.length.formula,data=iris)
Call:
lm(formula = petal.length.formula, data = iris)
Coefficients:
(Intercept) Sepal.Length Sepal.Width Speciesversicolor
-1.63430 0.64631 -0.04058 2.17023
Speciesvirginica
3.04911
您还可以尝试按照@BenBolker和@MrFlick的建议重新配制:
getFormula <- function(variable){
reformulate(c("Sepal.Length","Sepal.Width","Species"),
response = variable, intercept = TRUE)
}
lm(getFormula("Petal.Length"),data=iris)
Call:
lm(formula = getFormula("Petal.Length"), data = iris)
Coefficients:
(Intercept) Sepal.Length Sepal.Width Speciesversicolor
-1.63430 0.64631 -0.04058 2.17023
Speciesvirginica
3.04911