Dynamic variable names in R regressions

后端 未结 3 853
不思量自难忘°
不思量自难忘° 2021-01-05 04:48

Being aware of the danger of using dynamic variable names, I am trying to loop over varios regression models where different variables specifications are choosen. Usually

3条回答
  •  既然无缘
    2021-01-05 05:13

    The bang-bang operator !! only works with "tidy" functions. It's not a part of the core R language. A base R function like lm() has no idea how to expand such operators. Instead, you need to wrap those in functions that can do the expansion. rlang::expr is one such example

    rlang::expr(summary(lm(y ~ !!rlang::sym(var) + x2, data=df2)))
    # summary(lm(y ~ x1 + x2, data = df2))
    

    Then you need to use rlang::eval_tidy to actually evaluate it

    rlang::eval_tidy(rlang::expr(summary(lm(y ~ !!rlang::sym(var) + x2, data=df2))))
    
    # Call:
    # lm(formula = y ~ x1 + x2, data = df2)
    # 
    # Residuals:
    #     Min       1Q   Median       3Q      Max 
    # -0.49178 -0.25482  0.00027  0.24566  0.50730 
    # 
    # Coefficients:
    #               Estimate Std. Error t value Pr(>|t|)    
    # (Intercept)  0.4953683  0.0242949  20.390   <2e-16 ***
    # x1          -0.0006298  0.0314389  -0.020    0.984    
    # x2          -0.0052848  0.0318073  -0.166    0.868    
    # ---
    # Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    #
    # Residual standard error: 0.2882 on 997 degrees of freedom
    # Multiple R-squared:  2.796e-05,   Adjusted R-squared:  -0.001978 
    # F-statistic: 0.01394 on 2 and 997 DF,  p-value: 0.9862
    

    You can see this version preserves the expanded formula in the model object.

提交回复
热议问题