2011-06-07 155 views
2

可能重复:
Reading the last n lines from a huge text file[R readlines方法读取文件的只有最后一行

我创建使用

con=file(path_of_myfile) 

现在我想以一个文件的连接只读最后一行而不加载所有内容(这是一个巨大的文件)。

我想使用

?readLines 

没有成功。

任何想法?

+0

没有R 3具有像*什么寻求*功能? – 2011-06-07 11:02:07

+0

这个问题不是http://stackoverflow.com/questions/5596107/reading-the-last-n-lines-from-a-huge-text-file的确切副本,因为这里对'n = 1'的限制导致潜在更简单的解决方案。这是因为当你点击文件末尾时,通常会有最后一行可用。 – 2011-06-10 02:24:17

+0

@RockScience你有没有试过'count.felds()'?尝试'长度(count.fields(“foo.txt”))'。它应该是平台独立的,但它可能会更慢,因为它_counts fields_。 – Vulpecula 2011-08-05 21:10:55

回答

6

既然你是在Windows上,下载并安装邓肯Rtools如果你想自己构建R包,你将需要反正。 (如果你是在Linux上,那么唯一的区别是,你不需要下载任何东西,因为gawk已经存在。)然后发出此R指令:

system("gawk 'END {print}' myfile", intern = TRUE) 
+0

系统中出现错误...: 'gawk'not found是否必须向PATH添加内容? – RockScience 2011-06-08 03:28:07

+0

@Rockcience,假设Rtools在'C:\ Rtools'中,将'C:\ Rtools \ bin'添加到您的路径中。或者,使用'http:// batchfiles.googlecode.com'中的'Rgui.bat'来启动R(代替'Rgui.exe'),在这种情况下,它会自动将所需的目录添加到您的路径中R会议没有你必须改变任何事情。 – 2011-06-08 10:44:32

+0

好的作品,谢谢你的帮助! – RockScience 2011-06-10 02:43:21

5

如果您在类Unix系统上运行你可能使用wc计算行和R中,使用scan()skip说法:

lastline <- function(filename) { 
    ## filename is of mode character 
    out <- system(sprintf("wc -l %s",filename),intern=TRUE) 
    n <- as.integer(sub(sprintf("[ ]*([0-9]+)[ ]%s",filename),"\\1",out)) 
    print(n) 
    scan(filename,what="",skip=n-1,nlines=1,sep="\n",quiet=TRUE) 
} 

> lastline("myfile") 
+0

我很想在Unix上运行我的脚本,但是我不幸在Microsoft友好的环境中工作...... – RockScience 2011-06-07 11:20:18

+1

对于'system(“wc -l”)'配方的+1。 – 2012-12-21 22:22:43