lapply 中使用自定义函数提取结果的工作原理

How extracting results using custom function in lapply works

我正在尝试使用以下函数提取回归系数;

## customized function to return coef as matrix

cust_lm<- function(varname, data){ 
y<-data[,varname]   
coefOLS<- as.matrix(coef(summary(lm(y~x))));            
}

我想运行每次使用此函数使用不同的因变量(自变量保持不变)进行回归。我正在使用 lapply

## artificial data
x<-rnorm(100,5,3)
ydata<-data.frame(y1=rnorm(100), y2=rnorm(100))

## running regressions together and storing as list
list<-lapply(names(ydata)[1:2], function(x) cust_lm(x, ydata))

我得到了想要的结果,其中 list[[1]] 只是 coef(summary(lm(ydata[,1]~x)))list[[2]] 等于 coef(summary(lm(ydata[,2]~x)))

我之前在几篇 SO 帖子的帮助下写了这篇文章。现在我想破译我的自定义函数以了解它是如何工作的,而且我对 lapply 不是很清楚。

我已经创建了自定义函数,其中的参数需要 (varname, data),我再次将 cust_lm(x, data) 作为 lapply 中的参数。这是正确的做法吗?

如果我给 list<-lapply(names(ydata)[1:2], function(z) cust_lm(z, data)) 对吗?。我对此很困惑。任何 help/resources 都表示赞赏。

你总是可以尝试一点一点地分解它。 lapply 的第一次迭代将调用 cust_lm('a', ydata)。一起来看看:

cust_lm('y1', ydata)
#                 Estimate Std. Error     t value  Pr(>|t|)
# (Intercept)  0.006170844 0.22234415  0.02775357 0.9779151
# x           -0.004470560 0.03960525 -0.11287797 0.9103582

在您的代码中,名称 data 是函数 内的变量名称 。因此,当您指定 list<-lapply(names(ydata)[1:2], function(z) cust_lm(z, data)) 时,R 将在调用该行时查找名为 data 的变量。所以这是错误的。用 list<-lapply(names(ydata)[1:2], function(x) cust_lm(x, ydata)) 调用它是正确的答案。您可以将其进一步简化为:

list <- lapply(names(ydata)[1:2], cust_lm, data=ydata)

这分解为 "call cust_lm with each element of names(ydata)[1:2] in turn as first argument; use ydata for the argument named data"。