如何将由“+”分隔的变量名称列表传递给函数

时间:2013-09-05 17:26:18

标签: r function paste

我在R中使用lrm函数进行逻辑回归,需要一个由" +"分隔的变量名列表:

lrm(rating~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10,data=d5)

有超过10个,我不想全部写出来。有没有办法让paste()使函数有效?

以下是我用+:

分隔Xis字符串的方法
x = "X1"
for(i in 2:10){
  xi = paste("X",i,sep="")
  x = paste(x,xi,sep="+")
}

到目前为止我所尝试过的一切都没有:

lrm(rating~x,data=d5)
lrm(rating~paste(x),data=d5)
lrm(rating~get(paste(x)),data=d5)

2 个答案:

答案 0 :(得分:4)

确实你可以:

paste0( "X" , 1:10 , collapse = "+" )
#[1] "X1+X2+X3+X4+X5+X6+X7+X8+X9+X10"

或者更具体地说,你可能希望传递一个formula对象,你可以使用as.formula这样做:

fmla <- as.formula( paste0( "rating ~ " , paste0( "X" , 1:10 , collapse = "+" ) ) )
# rating ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10

#  Then use it like any other variable
lrm( fmla , data=d5 ) 

答案 1 :(得分:3)

一种方法是在数据参数中使用paste,然后使用Y ~ .

lrm( rating~., data=d5[ , c("rating", paste("X", 1:20, collapse="+"))] )

您需要使用collapse而不是sep来获取返回值中的一个而不是二十个元素。