使附加数据框(具有未知的nrow)更有效

时间:2015-12-09 14:45:20

标签: r performance data.table

我目前正在开发一项功能,使我能够执行以下操作:

我有一个包含csv文件的列表,它代表我的数据集(大约800个)。我现在想迭代该列表,打开每个数据集并只复制1列(变量),只将该列附加到data.table。最后,data.table应该有两列,如下所示:

     ID    Value
     1     x
     1     y
     ..    .. 
     2     z
     2     a
     ..    ..
     n     ..

我有一个正常工作的功能(见下面的代码)但似乎很慢。我已经阅读过,例如,在它的大小开始时初始化data.table更有效和更快,因此已经分配了内存,因为R似乎处理内存的重新分配不太好。例如,我已阅读此here

这是我需要你帮助的地方 - 我不能说桌子到底会有多大,因为每个数据集都有不同的大小。还有办法让我的代码更有效率吗?

read.var_overall <- function(applog_list, varname) {
  final_dt <- data.table(SN = "", Values = "") # initialization of the data.table 
                                               # but I don't know its size yet!

  for (i in 1:length(applog_list)) { # Iteration over the csv-list.
    if (app_log.isokay(as.character(applog_list[i]))) { # check if csv's format is okay
  values <- read.app_log(as.character(applog_list[i]))[, get(varname)] # read out the values
  sn <- read.sn(applog_list[i]) # get the ID

  dt <- data.table(SN = sn, Values = values) # create data.table for this dataset (csv)

  final_dt <- rbindlist(list(final_dt, dt)) # append datatables
     }
return(final_dt)
}

0 个答案:

没有答案