0

以前我用来bigstatsr存储计算值(双精度)。

doParallel这些值是使用包并行计算的。

现在,我正在尝试使用bigstatsr来存储更复杂的对象。通常以列表的形式。

直到现在我才注意到bigstatsr不支持list对象甚至character类型......

有什么替代品可以用来存储list对象吗?

下面是一个可重现的例子。请注意,bigMatrice_sepalLength可以捕获数值但bigMatrice_sepalLengthWidth无法捕获数值列表并且bigMatrice_species无法存储字符值。

在我的实际用例中,我需要并行化一些预测模型。

通常,输出是值列表(历史、预测)、模型列表、模型参数列表等。

以前我可以使用 bigstatsr,因为我只存储预测值。虽然这一次,我也想捕获其他信息。

谢谢!

library(foreach)
library(doParallel)

bigMatrice_sepalLength <- bigstatsr::FBM(nrow=nrow(iris),ncol=1)
bigMatrice_sepalLengthWidth <- bigstatsr::FBM(nrow=nrow(iris),ncol=1)
bigMatrice_species <- bigstatsr::FBM(nrow=nrow(iris),ncol=1)

cl_start <- Sys.time()
# set nb core to use
#no_cores <- detectCores() - 3
no_cores <- 1

# create cluster
cl <- makeCluster(no_cores, outfile = "")
# prepare cluster
registerDoParallel(cl)
foreach(i = 1:nb_forecast_level, .combine=cbind)  %dopar%  {
  bigMatrice_sepalLength[i,] <- iris[i,1]
  bigMatrice_sepalLengthWidth[i,] <- iris[i,c(1,2)] %>% list()
  bigMatrice_species[i,] <- iris[i,5]
}
stopCluster(cl)
stopImplicitCluster()
cl_end <- Sys.time()
(cl_runtime <- cl_end - cl_start)
as_tibble(bigMatrice_sepalLength[])
as_tibble(bigMatrice_sepalLengthWidth[])
as_tibble(bigMatrice_species[])

结果

> as_tibble(bigMatrice_sepalLength[])
# A tibble: 150 x 1
   value
   <dbl>
 1   5.1
 2   4.9
 3   4.7
 4   4.6
 5   5  
 6   5.4
 7   4.6
 8   5  
 9   4.4
10   4.9
# … with 140 more rows
> as_tibble(bigMatrice_sepalLengthWidth[])
# A tibble: 150 x 1
   value
   <dbl>
 1     0
 2     0
 3     0
 4     0
 5     0
 6     0
 7     0
 8     0
 9     0
10     0
# … with 140 more rows
> as_tibble(bigMatrice_species[])
# A tibble: 150 x 1
   value
   <dbl>
 1     0
 2     0
 3     0
 4     0
 5     0
 6     0
 7     0
 8     0
 9     0
10     0
# … with 140 more rows
4

0 回答 0