R cbind非常慢

R cbind非常慢,r,performance,cbind,R,Performance,Cbind,有一个问题的标题非常相似(),但它对我的问题没有帮助。我正在检索10+个JSON文件,每个文件包含100个变量,并尝试创建一个包含1000列的big data.frame/table。实际上,我并没有使用与示例中相同的JSON文件,而是使用不同的JSON文件。理想情况下,只有有问题的行cx,问题在于逐步扩展data.frame。如果您改为使用中间结果创建列表,则可以使用do.call(cbind,result\u list)仅执行单个cbind。例如,result\u list或者:当您使用da

有一个问题的标题非常相似(),但它对我的问题没有帮助。我正在检索10+个JSON文件,每个文件包含100个变量,并尝试创建一个包含1000列的big data.frame/table。实际上,我并没有使用与示例中相同的JSON文件,而是使用不同的JSON文件。理想情况下,只有有问题的行
cx,问题在于逐步扩展data.frame。如果您改为使用中间结果创建列表,则可以使用
do.call(cbind,result\u list)
仅执行单个
cbind
。例如,
result\u list或者:当您使用
data.table
时,您可以使用
cx[,c(列名):=ax]
逐步添加列,这在时间复杂度上应该是线性的。您确定您的代码正在做您希望它做的事情吗?特别是在循环所有100个变量的部分?在我看来,您只是运行了100次相同的代码,输出看起来没有意义。有几个包带有
fromJSON
函数。无论何时使用非基函数,请通过调用
库(pkgname)
启动脚本。相关:。问题是逐步扩展data.frame。如果您改为使用中间结果创建列表,则可以使用
do.call(cbind,result\u list)
仅执行单个
cbind
。例如,
result\u list或者:当您使用
data.table
时,您可以使用
cx[,c(列名):=ax]
逐步添加列,这在时间复杂度上应该是线性的。您确定您的代码正在做您希望它做的事情吗?特别是在循环所有100个变量的部分?在我看来,您只是运行了100次相同的代码,输出看起来没有意义。有几个包带有
fromJSON
函数。无论何时使用非基函数,请通过调用
库(pkgname)
启动脚本。相关:。
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"