【发布时间】:2020-10-05 22:52:39
【问题描述】:
下面的代码使用 R 的 lm 创建一个线性模型,然后是一个带有权重列的加权模型。最后,我尝试使用变量weight_col 传入权重列名,但失败了。我很确定它在 df 中寻找“weight_col”,然后调用者的环境,找到一个长度为 1 的变量,并且长度不匹配。
如何让它使用 weight_col 作为 df 中权重列的名称?
我尝试了几种组合方式都没有成功。
> df <- data.frame(
x=c(1,2,3),
y=c(4,5,7),
w=c(1,3,5)
)
> lm(y ~ x, data=df)
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) x
2.333 1.500
> lm(y ~ x, data=df, weights=w)
Call:
lm(formula = y ~ x, data = df, weights = w)
Coefficients:
(Intercept) x
1.947 1.658
> weight_col <- 'w'
> lm(y ~ x, data=df, weights=weight_col)
Error in model.frame.default(formula = y ~ x, data = df, weights = weight_col, :
variable lengths differ (found for '(weights)')
> R.version.string
[1] "R version 3.6.3 (2020-02-29)"
【问题讨论】:
-
在您的示例中,
weight_col只是一个字符串,"w"。它不是对df中的列的引用。也许weights=df[[weight_col]]?第一次使用 ifweights=w,这与解析为weights="w"的第二个示例非常不同。