Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将权重传递给lm和函数中的其他对象_R_Function_Syntax_Lm - Fatal编程技术网

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_coll
lm_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')