R:动态参数

时间:2016-05-18 15:26:05

标签: r dynamic arguments parameter-passing

我使用的R函数需要一个变量列表作为输入参数,格式如下:

  output <- funName(gender ~ height + weight + varName4, data=tableName)

基本上,输入参数是表中的列名(并且不包含在&#34;&#34;中)。我有一个列表,我想逐个添加这些变量;即先用一个变量运行函数,得到输出,然后逐步增加变量(每次得到一个输出),即

迭代1:

  output <- funName(gender ~ height, data=tableName)

迭代2:

  output <- funName(gender ~ height + weight, data=tableName)

迭代3:

  output <- funName(gender ~ height + weight + varName4, data=tableName)

这可能吗?

1 个答案:

答案 0 :(得分:3)

尝试以下方法:

# vector of variable names
myNames <- c("gender", "height", "weight", "varName4")

# print out results
for(i in 2:4) {
  print(as.formula(paste(myNames[1], "~", paste(myNames[2:i], collapse="+"))))
}

当然,您可以将print替换为相应的funName,例如lm,以及其他参数。所以

for(i in 2:4) {
  lm(as.formula(paste(myNames[1], "~", paste(myNames[2:i], collapse="+"))), data=tableName)
}

应该像你期望的那样工作。如果您想以有序的方式保存结果,也可以使用lapply

temp <- lapply(2:4, function(i) as.formula(paste(myNames[1], "~", 
                                             paste(myNames[2:i], collapse="+"))))
例如,

将保存公式列表。

使用@ ben-bolker提到的reformulate函数,您可以简化paste函数的网络:

for(i in 2:4) {
  print(reformulate(myNames[2:i], response = myNames[1], intercept = TRUE)) 
}