我是一个新手R用户。现在,我有一个问题与写出多个不同名称的文件有关。假设我的数据有以下结构。
IV_HAR_m1<-matrix(rnorm(1:100), ncol=30, nrow = 2000)
DV_HAR_m1<-matrix(rnorm(1:100), ncol=10, nrow = 2000)
我试图估计多个LASSO回归。在开始的时候,我是把迭代的数据存储在一个叫做 Dinamic_beta
. 这个对象只存储在一个文件中,而且每次我的代码迭代时,它都会保存所需的信息。
为了做到这一点,我使用了 stew
属于 pomp
包,但整个过程需要5、6天,我担心停电或电脑故障。
现在,我想把每个环境(迭代)保存在一个.Rnd文件中。我不知道如何才能做到这一点,但我正在使用的代码如下。
library(glmnet)
library(Matrix)
library(pomp)
space <- 7 #THE NUMBER OF FILES THAT I would WANT TO CREATE
Dinamic_betas<-array(NA, c(10, 31, (nrow(IV_HAR_m1)-space)))
dimnames(Dinamic_betas) <- list(NULL, NULL)
set.seed(12345)
stew( #stew save the enviroment in a .Rnd file
file = "Dinamic_LASSO_RD",{ # The name required by stew for creating one file with all information
for (i in 1:dim(Dinamic_betas)[3]) {
tryCatch( #print messsages
expr = {
cv_dinamic <- cv.glmnet(IV_HAR_m1[i:(space+i-1),],
DV_HAR_m1[i:(space+i-1),], alpha = 1, family = "mgaussian", thresh=1e-08, maxit=10^9)
LASSO_estimation_dinamic<- glmnet(IV_HAR_m1[i:(space+i-1),], DV_HAR_m1[i:(space+i-1),],
alpha = 1, lambda = cv_dinamic$lambda.min, family = "mgaussian")
coefs <- as.matrix(do.call(cbind, coef(LASSO_estimation_dinamic)))
Dinamic_betas[,,i] <- t(coefs)
},
error = function(e){
message("Caught an error!")
print(e)
},
warning = function(w){
message("Caught an warning!")
print(w)
},
finally = {
message("All done, quitting.")
}
)
if (i%%400==0) {print(i)}
}
}
)
如果有人能建议另一个包,存储输出 在不同的文件,我会感激。
试着在你的循环结束前加入这个内容。
save.image(paste0("Results_iteration_",i,".RData"))
这应该会在每次迭代时将整个工作空间保存到磁盘上。然后你可以使用 load()
来加载每个环境的工作空间。请告诉我这是否可行。