两个条件: 1 这是问题提出后的几年; 2 这仅适用于替换最后一行。尽管有第 2 点,但我认为可以对其进行修改以纠正除最后一行之外的特定行修改。
readLines 和 writeLines 似乎比使用大型数组需要时间的 read.table 和 write.table 更有效。在下面的示例中,我删除了一个大数组的最后一行并将其替换为新文本。
通过创建一个大数组并保存为文件来设置示例:
write.table(
array(runif(1000000),dim=c(1000,1000)),
file="BigArray.r", row.names = FALSE, col.names = FALSE, sep = "\t")
使用 readLines 打开大数组文件,删除最后一行,然后重新写入。另外,使用 writeLines 添加新的最后一行:
time=proc.time()
BigArray=readLines("BigArray.r")
BigArray=BigArray[-length(BigArray)]
writeLines(BigArray,"BigArray.r",sep="\n")
write(seq(1,1000,1),ncolumns=1000,file="BigArray.r",append=TRUE,sep="\t")
proc.time()-time
user system elapsed
0.69 0.10 0.85
这比替代方案表现更好:
time=proc.time()
BigArray=read.table("BigArray.r", sep = "\t")
BigArray[1000,]=seq(1,1000,1)
write.table(BigArray,file="BigArray.r", row.names = FALSE, col.names = FALSE,
sep =
"\t")
proc.time()-time
user system elapsed
3.62 0.11 3.75
也许有人能够更好地替换数组中间的特定行,但我无法将新行插入到 readLines 转换成的相同文本格式中。