我有一个文本文件,没有明显的表格或其他结构,例如内容
some text on line 1
some more text on line 2
even more text on the third line
etc
Run Code Online (Sandbox Code Playgroud)
从这个文件到控制台打印出前几行(比方说2行)文本的最优雅和R类似的方法是什么?
选项1:readLines
readLines('file.txt', n=2)
# [1] "some text on line 1" "some more text on line 2"
Run Code Online (Sandbox Code Playgroud)
该n=2选项很有用,但我想要原始文件内容,而不是单独的行作为向量的元素.
选项2:file.show
file.show('file.txt')
# some text on line 1
# some more text on line 2
# even more text on the third line
# etc
Run Code Online (Sandbox Code Playgroud)
这种输出格式是我想看到什么,但一个选项来限制的行数,如n=2在readLines,缺少.
选项3:system('head')
system('head -n2 file.txt')
# some text on line 1
# some more text on line 2
Run Code Online (Sandbox Code Playgroud)
这正是我想得到的输出,但我不确定这是否适用于所有平台,并且为这样一个简单的任务调用外部命令有点尴尬.
可以将readLines解决方案与粘贴 相结合并cat格式化输出,但这似乎过多了.一个简单的命令就像file.head是好的,或者是一个n=2参数file.show,但都不存在.在R中实现这一目标的最优雅,最紧凑的方法是什么?
为了澄清这里的目标:这是为了编写一个R教程,其中的叙述类似于"......我们现在已经将数据写入新的文本文件,所以让我们通过查看第一个来看看它是否有效几行...".在这一点上,一个简单而紧凑的R表达式,使用base(update:或tidyverse)函数来完成这一点将非常有用.
使用writeLines有readLines:
writeLines(readLines("file.txt", 2))
Run Code Online (Sandbox Code Playgroud)
给予:
some text on line 1
some more text on line 2
Run Code Online (Sandbox Code Playgroud)
这也可以写为以下管道。它给出了相同的输出:
library(magrittr)
"file.txt" %>% readLines(2) %>% writeLines
Run Code Online (Sandbox Code Playgroud)