我正在尝试使用apply()系列函数来回归向量上矩阵的每一列,为每列生成一组系数,但我无法绕过它。例如,我可以通过循环执行此操作,如下所示:
x <- matrix(runif(10*10), 10,10)
y <- runif(10)
coefs <- matrix(NA, ncol = 2, nrow = 10)
for(i in 1:10){
coefs[i,] <- lm(y~x[,i])$coef
}
非常感谢帮助将上面的循环转换为应用函数。感谢。
答案 0 :(得分:1)
这应该这样做:
t(apply(x, 2, function(x.col) lm(y~x.col)$coef))
我们通过列应用矩阵x
(这是2
的意思),我们定义一个简单的函数来获得结果。 apply
会自动将结果堆叠为2行矩阵,我们会将其转换为t
所需的格式:
(Intercept) x.col
[1,] 0.6314854 -0.567179167
[2,] 0.3679481 0.020019158
[3,] 0.2448379 0.280314036
[4,] 0.4195727 -0.082207564
[5,] 0.1249273 0.425974675
[6,] 0.4567553 -0.194174789
[7,] 0.2653036 0.181709766
[8,] 0.2963443 0.217408463
[9,] 0.2902572 0.174962624
[10,] 0.3730373 0.007380176
注意你的循环没有问题。由于您初始化coefs
,因此它应该与apply
一样快。如果你想要速度,你应该看一个比lm
更快的计算斜率和截距的选项,因为这样可以减慢它的速度。