r - 如何在 R 的 lm 中将“权重”列名作为变量传递?
问题描述
下面的代码使用 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)"
解决方案
您可以将数据框名称与提取器运算符一起使用:
lm(y ~ x, data = df, weights = df[[weight_col]])
或者你可以使用函数get
:
lm(y ~ x, data = df, weights = get(weight_col))
推荐阅读
- documentation - 我如何将我的项目中的代码呈现到我的论文中?
- css - 类型“字符串”不可分配给类型“位置”
- javascript - 在我的页面和 iframe 之间进行通信并相互发送数据
- xcode - XCode - 如何创建捆绑的 CLI 工具应用程序
- flutter - Dart:无法添加 _InternalLinkedHashMap
到列表 - c# - 如何从另一个表单刷新文本框?C#
- java - @kafkaListener 的范围
- amazon-web-services - 停止并重新启动后,无法通过 Web 浏览器访问 EC2 实例上的 Jupyter Lab
- python - 当我在 pydriod 3 应用程序上运行 python manage.py runserver 时找不到模板
- google-cloud-platform - GCP 监控代理不断增加内存使用量