大文件的第5行(总共1000 000行)如下:
c6 c24 c32 c54 c67
c6 c24 c32 c51 c68 c78
c6 c32 c54 c67
c6 c32 c55 c63 c85 c94 c75
c6 c32 c53 c67
readLines()可以从第1行一次读取一行。当我想读取第20001行时, readLines()效率不高。 R函数可用于读取和删除大文件中的特定行。谢谢。
答案 0 :(得分:1)
如果您只想阅读文件,请使用同时包含scan
和skip
参数的nlines
。
scan( "myfile" , skip = 20000 , nlines = 1 )
我不确定是否删除。通常使用R,所有都是可能的,但我认为如果你想拥有原始文件的完整副本,你必须先阅读整个文件才能删除该行, sans < / em>您指的具体行。
答案 1 :(得分:0)
两个条件: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转换为相同文本格式的新行。