有很多R主题类似的帖子,但它们没有提供我想要的内容。
伪代码(这并不意味着是R),如下所示:
fileConn <- file("foo.txt")
for (i in 1:hiLimit) {
# extract elements from each nested and variable json element in an R list.
# paste elements into a comma separated list
write(pastedStuff,fileConn)
}
close(fileConn)
现在,如果我跳过“文件”和“关闭”,而仅将“ cat”与文件名和“ append = TRUE”一起使用,如下所示:
cat(paste(cve,vndr,pnm,vnmbr,vaffct,sep=","),file="outfile.txt",append=TRUE,sep="\n")
我得到了我想要的。但是,大概这是为每个调用打开和关闭文件(假设)。避免这种情况会使其更快。
我无法解决的是如何通过psuedo代码中的方法获得结果,该方法仅打开和关闭文件一次。使用'cat'或'writeLines'只是给我文件的最后一行。
通过解释,我正在解决的问题涉及从头开始逐行构建数据帧。我的时间安排(请参阅下文)表明,到目前为止,我能做到的最快方法是将csv写入磁盘,然后再读回以创建数据帧。这太疯狂了,但这就是它的平移方式。
## Just the loop without any attempt to collect parsed data into a dataframe
system.time(tmp <- affectsDetails(CVEbase,Affect))
user system elapsed
0.30 0.00 0.29
## Using rbind as in rslt<- rbind (rslt,c(stuff)) to build dataframe in the loop.
system.time(tmp <- affectsDetails(CVEbase,Affect))
user system elapsed
990.46 2.94 994.01
# Preallocate and insert list as per
# https://stackoverflow.com/questions/3642535/creating-an-r-dataframe-row-by-row
system.time(tmp <- affectsDetails(CVEbase,Affect))
user system elapsed
1451.42 0.04 1452.37
# Write to a file with cat and read back the csv.
system.time(tmp <- affectsDetails(CVEbase,Affect))
user system elapsed
10.70 29.00 45.42
任何建议表示赞赏!
答案 0 :(得分:0)
不确定如何为您提供帮助。但是您可以打开一个连接并将其保持打开状态,直到写入完成。
testcon <- file(description = "C:/test.txt", open = "a")
isOpen(testcon)
[1] TRUE
start <- Sys.time()
for (i in 1:10000) {
cat(paste0("hallo", i), file= testcon, append=TRUE,sep="\n")
}
end <- Sys.time()
end-start
Time difference of 0.2017999 secs
close(testcon)
似乎比以下速度快得多:
start <- Sys.time()
for (i in 1:10000) {
cat(paste0("hallo", i), file= "C:/test.txt", append=TRUE,sep="\n")
}
end <- Sys.time()
end-start
Time difference of 3.382569 secs