R 将权重传递给lm和函数中的其他对象
我有以下资料:R 将权重传递给lm和函数中的其他对象,r,function,syntax,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, 200
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")
据我所知,您希望将权重列名作为字符串传递,而不是使用
$
引用它(根据我上面的评论)。实现这一点的简单方法是:
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')
lm_colllm_coll(DF,weights=DF$wt)
应该对这两者都有效。感谢您的评论!你知道这种差异是从哪里来的吗?为什么?我更喜欢在函数内部解决它,而不是在函数的调用中解决。不过现在它确实完成了这项工作,非常感谢!在函数定义中,不使用data
参数;相反,您使用的是DF
,它可能是一些全局对象。参数的默认值也是全局对象,这是一种不好的做法:函数应该只使用它们的参数,而不依赖全局对象。@nicola感谢您的评论。数据/df问题是一个输入错误/错误。更正了。这确实是一个非常简单的修复,非常感谢!关于你的评论。data=DF
部分是一个打字错误(参见Nicola的评论)。我在问题中将它改为data=data
。你对全球环境的评论是否仍然适用于新形势?是的<代码>lm_coll
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')