Захват параллельных типов вывода R: альтернативы bigstatsr, которые поддерживают tibble, такие как матрица, и различные типы переменных? - PullRequest
0 голосов
/ 21 июня 2020

Раньше я использовал bigstatsr для хранения вычисленных значений (double).

Эти значения были вычислены параллельно с использованием пакета doParallel.

Теперь я пытаюсь использовать bigstatsr для хранения более сложных объектов. Обычно в виде списка.

И только сейчас я заметил, что bigstatsr не поддерживает list объект или даже character тип ...

Есть ли альтернативы, которые я можно использовать для хранения list объектов?

Ниже воспроизводимый пример. Обратите внимание, что bigMatrice_sepalLength может захватывать числовые значения, но bigMatrice_sepalLengthWidth не может захватить список числовых значений, а bigMatrice_species не может хранить символьные значения.

В моем фактическом варианте использования мне нужно было бы распараллелить некоторые модели прогнозирования.

Обычно выходными данными являются список значений (исторические, прогнозные), список моделей, список параметров моделей и т. д. c.

Раньше я мог использовать 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
...