我目前正在开发一项功能,使我能够执行以下操作:
我有一个包含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)
}