R cbind очень медленный - PullRequest
1 голос
/ 27 мая 2020

Есть вопрос с очень похожим названием ( cbind работает очень медленно ), но он не помогает мне с моей проблемой. Я получаю 10+ JSON файлов со 100 переменными каждый и пытаюсь создать один большой data.frame / table с 1000 столбцами. На практике я использую не один и тот же JSON -файл, как в примере, а другие. В идеале только проблема c строка cx <- cbind(cx, bx) будет ускоряться, поскольку другие строки (unlist, as.data.table) хорошо работают для меня, и я не знаю, что еще использовать. Я знаю, что cbind работает медленно, но есть ли у меня альтернативы? В идеале с Base R.

library(jsonlite)
library(data.table)

starttime <- Sys.time()
for (i in 1:10) {          # loop through all  10 json files
  zz <- Sys.time()         # measuring the time for each loop
  urlx <- "http://mysafeinfo.com/api/data?list=englishmonarchs&format=json"
  jsnx <- fromJSON(urlx)
  if(i==1) {
    ax <- unlist(jsnx)
    bx <- as.data.table(ax)
    cx <- bx
  }
  for (j in 1:100) {        # loop through all 100 variables in each file
    ax <- unlist(jsnx)
    bx <- as.data.table(ax)
    cx <- cbind(cx, bx) # <---- VERY SLOW ----
  }
  zz <- round(Sys.time()-zz,1)
  print(sprintf("%1.1f", zz))
  flush.console()
}
endtime  <- Sys.time()
endtime-starttime

Это становится все медленнее и медленнее с большим количеством файлов, вот мои тайминги.

[1] "0.7"
[1] "1.3"
[1] "1.3"
[1] "1.6"
[1] "2.1"
[1] "2.2"
[1] "2.5"
[1] "3.2"
[1] "3.4"
[1] "3.5"
...