这个问题,将文本行写入 R 中的文件,显示了将输出保存到纯文本文件的三种不同方式。使用问题中的示例,假设我们要创建一个output.txt以此文本命名的文件:
Hello
World
Run Code Online (Sandbox Code Playgroud)
问题的答案显示了三种方法:
writeLines():Hello
World
Run Code Online (Sandbox Code Playgroud)
sink():fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
Run Code Online (Sandbox Code Playgroud)
cat():sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
Run Code Online (Sandbox Code Playgroud)
一些答案和评论指出,这cat()会比其他两种方法慢。然而,我的问题是:
我搜索了所以只找到了链接的答案。我在 SO 上发现了其他为什么问题(例如,为什么处理排序数组比处理未排序数组更快?)所以我认为这个问题是该网站的主题。
简短的性能比较显示出明显的优势writeLines:
system.time(writeLines(con = 'writeLines.txt',text = paste('Line ',1:100000)))
#> user system total
#> 0.17 0.01 0.18
system.time(cat( paste('Line ',1:100000),file="cat.txt",sep="\n"))
#> user system total
#> 0.25 0.85 1.11
Run Code Online (Sandbox Code Playgroud)
查看 C 代码,cat使用RPrintf位于builtin.c中。
R 中的所有打印都是通过函数 Rprintf 和 REprintf 或其 (v) 版本 Rvprintf 和 REvprintf 完成的。
这些例程的工作方式与 (v)printf(3) 完全相同。Rprintf 写入“标准输出”。
它由sink()函数重定向
如上所述,使用sink()允许重定向连接。使用重定向一次到文件sink()肯定比打开新连接/附加数据/关闭每个新行(如使用cat(file=..., append=TRUE).
writeLinesRconn_printf使用位于connections.c中的专用C 函数并且速度更快。
总结 :
cat是控制台的标准 R 输出sink允许将cat输出重定向到另一个连接,例如文件,允许写入多行而无需重新打开连接writeLinessink+cat比文件输出更快建议,何时使用哪个:
cat()在控制台模式下记录 R 脚本进度。验证脚本后,sink()如果需要,允许将此输出重定向到文件,并且可能对脚本自动化有用。writeLines()当我特别想将数据(而不仅仅是日志)写入文件时,我会使用它,因为它具有更好的性能。| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |