в R, как сделать каждый кадр данных, сгенерированный в циклах foreach, доступным в глобальной среде - PullRequest
1 голос
/ 10 июля 2019

В R, как сделать каждый кадр данных, сгенерированный в цикле foreach, доступным как отдельные кадры данных в глобальной среде

Мне удалось сохранить их только в список (x), но список состоит из 3 слоев;существует более 40 000 фреймов данных, и их распаковка занимает очень много времени.

x <- foreach(q=1:countq, .export = ls(globalenv())) %do% {
        foreach(p=1:countp, .export = ls(globalenv())) %do% {
          foreach(o=1:countero, .export = ls(globalenv())) %dopar% {
            n<-rbind(df_o, df_p, df_q)
          }
        }

Было бы неплохо иметь фреймы данных n1, n2, n3, ... до n40000 из этого вложенного цикла foreach.

1 Ответ

0 голосов
/ 10 июля 2019

Ваши данные должны быть простыми в использовании после преобразования списка списков списков data.frames в один data.frame, например, с data.table::rbindlist.

library(doParallel)
registerDoParallel( cores = 2 )
countq <- countp <- countero <- 30
d <- mtcars
x <- 
foreach(q=1:countq) %do% {
    foreach(p=1:countp) %do% {
        foreach(o=1:countero) %dopar% {
            data.frame( q=q, p=p, o=o, d )
        }
    }
}
x <- lapply( x, function(u) lapply(u, data.table::rbindlist) )
x <- lapply( x, data.table::rbindlist )
x <- data.table::rbindlist(x)
x <- as.data.frame(x)
...