一个大文件的前5行(共100万行)如下:
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 函数从大文件中读取和删除特定行. 谢谢你。
一个大文件的前5行(共100万行)如下:
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 函数从大文件中读取和删除特定行. 谢谢你。
如果您只想读取文件,如何使用scan
which 同时具有 askip
和参数。nlines
scan( "myfile" , skip = 20000 , nlines = 1 )
但是,我不确定是否要删除。通常使用 R,一切皆有可能,但我认为,如果您想拥有原始文件的完整副本,则必须先读取整个文件,然后才能删除该行,而不是您所指的特定行。
两个条件: 1 这是问题提出后的几年;2 这仅适用于替换最后一行。尽管有第 2 点,但我认为可以对其进行修改以纠正除最后一行之外的特定行修改。
与使用大型数组需要时间的 read.table 和 write.table 不同,readLines 和 writeLines 似乎更有效。在下面的示例中,我删除了一个大数组的最后一行并将其替换为新文本。
通过创建一个大数组并保存为文件来设置示例:
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 转换成的相同文本格式中。