用固定参考列的 lm 的 apply 函数替换 for 循环
Replacing for loop with apply function for lm with a fixed reference colum
同事们鼓励我停止使用 for 循环,但我也不擅长应用函数。
我需要做的是根据固定参考值对多个公司进行回归,我可以使用 for 循环轻松实现,但使用 apply 系列就没那么多了。
我的数据和 for 循环看起来像:
Date AANRI AGLRI APARI ASTRI ASXRI DUERI ENVRI GASRI HDFRI SKIRI
1: 2006-01-06 504.86 26443.30 255.75 101.15 28050.84 108.77 247.71 169.61 99.03 100.00
2: 2006-01-13 498.86 26618.78 252.21 100.00 28324.59 110.70 251.43 171.67 99.18 103.36
3: 2006-01-20 492.41 27734.33 255.67 100.38 28436.87 110.41 247.41 169.61 98.92 101.68
4: 2006-01-27 498.86 28850.82 264.88 99.23 28815.26 111.90 246.70 173.74 98.26 99.16
5: 2006-02-03 497.48 28164.16 265.79 100.38 28614.28 111.16 244.88 170.98 99.64 97.48
6: 2006-02-10 500.71 28104.86 262.23 101.54 28567.93 112.21 248.63 173.05 99.38 98.32
我的 for 循环:
reg1_store <- list()
for(i in names(RI_c)[!grepl("ASX|Date", names(RI_c))]){
reg1_store[[i]] <- lm(get(i) ~ ASXRI, data = RI_c)
}
这很好用,我能够对 ASX 上的各个公司进行回归并相应地存储它们。
我想知道如何使用应用函数复制它?
@zhequan-li 提供了一个非常有效的解决方案。如果不考虑效率并且您希望结果在 list
中,您应该使用 lapply
。主要思想是给 lapply
一个代码向量(左侧的公司),将每个代码粘贴到 "X ~ ASXRI" 形式的字符串中,然后调用 lm
那个公式。
tickers <- names(RI_c)[!grepl("ASX|Date", names(RI_c))]
reg1_store <- lapply(tickers, function(x) {
lm(paste(x, "~ ASXRI"), RI_c)
})
# To name the elements of your list
names(reg1_store) <- tickers
同事们鼓励我停止使用 for 循环,但我也不擅长应用函数。
我需要做的是根据固定参考值对多个公司进行回归,我可以使用 for 循环轻松实现,但使用 apply 系列就没那么多了。
我的数据和 for 循环看起来像:
Date AANRI AGLRI APARI ASTRI ASXRI DUERI ENVRI GASRI HDFRI SKIRI
1: 2006-01-06 504.86 26443.30 255.75 101.15 28050.84 108.77 247.71 169.61 99.03 100.00
2: 2006-01-13 498.86 26618.78 252.21 100.00 28324.59 110.70 251.43 171.67 99.18 103.36
3: 2006-01-20 492.41 27734.33 255.67 100.38 28436.87 110.41 247.41 169.61 98.92 101.68
4: 2006-01-27 498.86 28850.82 264.88 99.23 28815.26 111.90 246.70 173.74 98.26 99.16
5: 2006-02-03 497.48 28164.16 265.79 100.38 28614.28 111.16 244.88 170.98 99.64 97.48
6: 2006-02-10 500.71 28104.86 262.23 101.54 28567.93 112.21 248.63 173.05 99.38 98.32
我的 for 循环:
reg1_store <- list()
for(i in names(RI_c)[!grepl("ASX|Date", names(RI_c))]){
reg1_store[[i]] <- lm(get(i) ~ ASXRI, data = RI_c)
}
这很好用,我能够对 ASX 上的各个公司进行回归并相应地存储它们。
我想知道如何使用应用函数复制它?
@zhequan-li 提供了一个非常有效的解决方案。如果不考虑效率并且您希望结果在 list
中,您应该使用 lapply
。主要思想是给 lapply
一个代码向量(左侧的公司),将每个代码粘贴到 "X ~ ASXRI" 形式的字符串中,然后调用 lm
那个公式。
tickers <- names(RI_c)[!grepl("ASX|Date", names(RI_c))]
reg1_store <- lapply(tickers, function(x) {
lm(paste(x, "~ ASXRI"), RI_c)
})
# To name the elements of your list
names(reg1_store) <- tickers