调用R语言lm()函数时,如何为公式内创建的项命名?
能否在lm公式内创建并命名新项?
可以,无需提前在数据框中创建新变量,直接在公式内就能完成新项的创建与命名,以下是两种实用方法:
方法1:公式内用赋值运算符<-定义
在公式中通过(新变量名 <- 计算逻辑)的形式,即可同时创建命名变量并指定其计算规则:
out4 <- lm(y ~ (x2 <- relevel(factor(x), ref = "C")), dat) summary(out4)
输出结果中,系数列会显示简洁的x2A、x2B,而非冗长的函数调用名:
#> Call: #> lm(formula = y ~ (x2 <- relevel(factor(x), ref = "C")), data = dat) #> #> Residuals: #> Min 1Q Median 3Q Max #> -2.07296 -0.52161 -0.03713 0.53898 2.12497 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 2.6551 0.1594 16.653 < 2e-16 *** #> x2A -0.5413 0.2350 -2.303 0.0234 * #> x2B 1.1359 0.2209 5.143 1.41e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 0.9297 on 97 degrees of freedom #> Multiple R-squared: 0.3703, Adjusted R-squared: 0.3573 #> F-statistic: 28.52 on 2 and 97 DF, p-value: 1.808e-10
方法2:在data参数中用transform临时生成
若追求更强的可读性,可在lm的data参数里通过transform创建命名变量,公式中直接引用新变量名:
out5 <- lm(y ~ x2, data = transform(dat, x2 = relevel(factor(x), ref = "C"))) summary(out5)
该方法的输出与方法1完全一致,且不会修改原始数据框dat,适合不想污染原始数据的场景。
注意事项
- 方法1中,赋值操作必须用括号包裹,否则公式解析会出错。
- 两种方法均为临时生成变量,仅在模型拟合过程中生效,不会改变原始数据集。
内容的提问来源于stack exchange,提问作者sfcheung
相关产品推荐
相关产品推荐

