r - 将权重传递给函数内的 lm 和其他人

标签 r function syntax lm

我有数据如下:

library(estimatr)
DF <- structure(list(country = c("C", "C", "C", "C", "J", "J", "B", 
"B", "F", "F"), year = c(2005, 2010, 2010, 2005, 2005, 2010, 
2010, 2005, 2010, 2005), sales= c(15.48, 12.39, 3.72, 23.61, 
4, 31.87, 25.33, 7.64, 0.26, 2.9), industry = c("D", "D", "E", 
"E", "F", "F", "F", "F", "D", "D"), urbanisation = c("B", "B", 
"A", "A", "B", "B", "A", "A", "C", "C"), size = c(1, 1, 5, 5, 
5, 5, 1, 1, 1, 1), wt = c(14L, 14L, 14L, 14L, 19L, 19L, 
30L, 30L, 20L, 20L), taxrate = c(12L, 14L, 14L, 12L, 21L, 18L, 
30L, 30L, 20L, 20L), vote = c(0, 0, 0, 0, 1, 1, 1, 0, 1, 1), 
    votewon = c(0, 0, 0, 0, 1, 0, 1, 0, 1, 1)), row.names = c(NA, 
10L), class = "data.frame")

我正在函数内调用 lmlm_robust。该示例应该是我正在使用的函数的简化版本,其中 lm 以某种方式将 weights=weights 作为参数,并且 lm_robust做同样的事情时会失败。现在,当我尝试重新创建错误时,它们都失败了..

我应该如何将weights参数传递给这个函数?

lm_coll <- function (data=data, weights=weights) {

    a <- lm(sales~size+taxrate+industry, weights=weights, data=data)
    summary(a)
    b <- lm_robust(sales~size+taxrate+industry, weights=weights, data=data)
    summary(b)
}

lm_coll(DF, weights=wt)

最佳答案

据我所知,您希望将权重列名称作为字符串传递,而不是使用 $ 引用它(根据我上面的评论)。实现此目的的一个简单方法是:

lm_coll <- function (data, weight) {
    weights = data[,weight]

    a <- lm(sales~size+taxrate+industry, weights=weights, data=data)
    print(summary(a))
    b <- lm_robust(sales~size+taxrate+industry, weights=weights, data=data)
    print(summary(b))
}

lm_coll(data=DF, weight='wt')

您的版本失败的原因是 R 试图从 lm_coll 内的本地环境中查找名为 wt 的对象。显然这是不存在的,因为环境仅包含 DF 以及名为 wt 的列。我的函数版本在环境中创建了一个名为 weights 的新对象。

关于r - 将权重传递给函数内的 lm 和其他人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65697555/

相关文章:

r - 在 R 中将函数与矢量参数集成

algorithm - 伪代码函数返回处理树的两个结果

function - Dart 编程语言中的函数和方法有什么区别?

syntax - Unusual Scheme `let`绑定(bind),什么是 `f`?

r - 如何获得R中字符串中的前10个单词?

r - R 的同比百分比变化

r - r中的去趋势函数

java - 如何在 Android 中多次调用一个方法

json - 蒙戈数据库 : updating an objects using dot notation (multi-level object)

c++迭代器,替代语法?