这是我滚动回归的代码:
outerAction$
第一个问题:
是否可以通过使用lapply函数来实现?
这是因为我要这样做4次。因为我有4个不同大小的数据帧:({# betas from rolling regression will be in betas_rolling_250 matrix
fixed.window<-30
models<-c("A~B+E","A~B+C","A~B+D","A~B+C","A~B+F","A~B+B","A~B+F","A~B+C")
betas_rolling_250<-matrix(,nrow=length(models),ncol=250-fixed.window)
rownames(betas_rolling_250)<-models;
#Sample Matrix
sample_matrix_250<-matrix(rexp(10, rate=.1),nrow=250, ncol=6)
colnames(sample_matrix_250)<-c("A","B","C","D","E","F")
for(i in 1:(length(sample_matrix_250[,1])-fixed.window)){
for(k in 1:length(rownames(betas_rolling_250))){
coefs<-lm(rownames(betas_rolling_250)[k],data=as.data.frame(sample_matrix_250[(221-i):(251-i),]))$coefficients[3]
betas_rolling_250[k,i]<-coefs }
}
,sample_matrix_220
和sample_matrix_200
)。我不希望我的代码太大。
我一直在考虑使用列表。这就是为什么我要使用lapply函数的原因。
有可能吗?
答案 0 :(得分:1)
考虑通过将唯一更改的变量矩阵列大小作为输入参数进行通用化设置。然后,将过去的数值列表放入lapply
调用中。
以下将任何250替换为变量(根据需要进行调整)。静态模型和 fixed.window 应该在函数外部分配一次。
get_coeffs <- function(mat_size) {
betas_rolling <- matrix(,nrow=length(models), ncol=mat_size-fixed.window)
rownames(betas_rolling) <- models
sample_matrix <- matrix(rexp(10, rate=.1), nrow=mat_size, ncol=6)
colnames(sample_matrix) <- LETTERS[1:6]
for(i in 1:(length(sample_matrix[,1])-fixed.window)){
for(k in 1:length(rownames(betas_rolling))){
coefs <- lm(rownames(betas_rolling)[k],
as.data.frame(sample_matrix[(mat_size-fixed.window)-i):(mat_size+1-i),]))$coefficients[3]
betas_rolling[k,i] <- coefs
}
}
return(betas_rolling)
}
matrix_list <- lapply(c(180, 200, 220, 250), get_coeffs)