【问题标题】:R: dynamic argumentsR:动态参数
【发布时间】:2016-09-15 04:44:15
【问题描述】:

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

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

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

迭代 1:

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

迭代 2:

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

迭代 3:

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

这可能吗?

【问题讨论】:

    标签: r dynamic arguments parameter-passing


    【解决方案1】:

    尝试以下方法:

    # 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)) 
    }
    

    【讨论】:

    • 另见?reformulate
    • 感谢这个 lmo。非常有用的答案,就像一个魅力。还将研究重新制定本。谢谢。
    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2017-06-15
    • 1970-01-01
    • 2015-07-29
    • 2016-12-07
    • 2021-07-28
    相关资源
    最近更新 更多