【问题标题】:How I pass string inside R function我如何在 R 函数中传递字符串
【发布时间】:2021-01-04 22:02:24
【问题描述】:

我有一个 df,我想做一个带有标题名称的函数并返回线性模型。

我正在尝试这个:

a <- function(j,k){
  reg1 <- lm(data$j ~ data$k)
  summary(reg1)
}

a(j="hour",k="score")

'data$j' 为 NULL

【问题讨论】:

    标签: r string function dataframe


    【解决方案1】:

    试试这个。如果您打算使用作为数据帧中的变量的字符串,最好使用[[]] 在函数中调用它们。这里是你的函数的代码有轻微的变化:

    a <- function(j,k){
      reg1 <- lm(data[[j]] ~ data[[k]])
      summary(reg1)
    }
    
    a(j="hour",k="score")
    

    还有一个使用iris 数据集的小例子:

    #Example
    data=iris
    #Code
    a(j="Sepal.Length",k="Petal.Length")
    

    如果需要,您可以进一步调整您的函数a

    【讨论】:

      【解决方案2】:

      当将列名作为变量传递时,您不能使用$。您可以通过以下几种方式执行此操作。

      1. 使用重新公式创建公式对象
      a <- function(data, j,k){
        reg1 <- lm(reformulate(k, j), data = data)
        summary(reg1)
      }
      
      1. lm 也接受公式作为字符串,因此您不一定需要将其转换为公式对象。
      a <- function(data, j,k){
        reg1 <- lm(sprintf('%s~%s', j, k), data = data)
        summary(reg1)
      }
      

      你可以这样称呼它:

      a(mtcars, 'mpg', 'cyl')
      
      #Call:
      #lm(formula = sprintf("%s~%s", j, k), data = data)
      
      #Residuals:
      #    Min      1Q  Median      3Q     Max 
      #-4.9814 -2.1185  0.2217  1.0717  7.5186 
      
      #Coefficients:
      #            Estimate Std. Error t value Pr(>|t|)    
      #(Intercept)  37.8846     2.0738   18.27  < 2e-16 ***
      #cyl          -2.8758     0.3224   -8.92 6.11e-10 ***
      #---
      #Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
      
      #Residual standard error: 3.206 on 30 degrees of freedom
      #Multiple R-squared:  0.7262,   Adjusted R-squared:  0.7171 
      #F-statistic: 79.56 on 1 and 30 DF,  p-value: 6.113e-10
      

      请注意,我在函数中添加了data 作为附加参数。在函数中传递数据对象而不是依赖它在全局环境中进行评估通常是一种更好的做法。

      【讨论】:

        猜你喜欢
        • 2017-02-27
        • 2017-10-13
        • 1970-01-01
        • 2012-01-01
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多