从不同的列表创建变量名称

时间:2013-02-07 12:17:00

标签: r

我正在尝试从R中的列表创建变量名,但我正在努力!

我最不想做的是使用以前创建的列表来创建多元线性回归的公式,其中列表中的每个值都将标识回归公式的一个解释变量。

我从x个可变长度列表开始(GoodModels_LMi,其中i从1开始) 到x)并使用每个列表创建一个单独的公式。

for (i in 1:x){
    lm(formula created from appropriate list)
    i<-i+1
    }

列表对应于从数据矩阵(AllData)中选择的变量号。因此对于 例如:

GoodModels_LM1<-c(2,4,8)

我希望我的回归公式为:

AllData[,1]~AllData[,2]+AllData[,4]+AllData[,8]

我一直在尝试使用as.formula()和paste()来实现这一点,但是,我不知道如何创建公式的第二部分。

as.formula(paste("AllData[,",i,"]~",paste(?????????)))

我知道下面的内容不对,但是我已经接近了:

paste("AllData[,",paste("GoodModels_LM",i,sep=""),"]",collapse="+")

我也研究过assign(),但没有成功,因为value参数与x参数相同。

非常感谢您对此的任何帮助!

奥利维亚

1 个答案:

答案 0 :(得分:2)

您的公式应包含列names,而不是实际数据。这是一个使用iris的小型演示。

想象一下,您想使用iris中的第2,4和5列运行回归。首先,使用paste()构建公式:

vars <- c(2, 4, 5)
frm <- paste("Sepal.Length ~ ", paste(names(iris)[vars], collapse=" + "))
frm

"Sepal.Length ~  Sepal.Width + Petal.Width + Species"

因此,对象frm是一个字符串,其中包含可以传递给lm()的公式:

lm(frm, iris)
Call:
lm(formula = frm, data = iris)

Coefficients:
      (Intercept)        Sepal.Width        Petal.Width  
           2.5211             0.6982             0.3716  
Speciesversicolor   Speciesvirginica  
           0.9881             1.2376