Next: , Previous: Types of connections, Up: Connections



6.2 输出到连接

我们已经描述过函数 catwritewrite.tablesink 的写入文件的功能,特别是参数append = TRUE时, 在一个文件末尾添加内容的功能。这些也是这些函数在 R 1.2.0之前的 功能。

这些函数当前功能的体现和以前是一样的,但是实际发生的是, 当 file 参数是一个字符串时,打开文件连接(写入或者添加)和 函数调用后再次关闭连接。 如果我们想重复性地写入到同样的文件中, 显式地声明和打开一个连接,把这个连接对象传递给 一个输出函数是比较有效的。这使得写入到一个管道 成为一种可能。在早期的版本中,通过语法 file = "|cmd" 已经部分实现(现在还在使用)。

还有一个函数 writeLines 用于把全部的文本行 写入到一个连接。

一些简单的例子如下

     zz <- file("ex.data", "w")  # 打开一个输出文件连接
     cat("TITLE extra line", "2 3 5 7", "", "11 13 17",
         file = zz, sep = "\n")
     cat("One more line\n", file = zz)
     close(zz)
     
     ## 使用管道(Unix)在输出中把小数点转换成逗号
     ## R字符串和(可能)SHELL脚本中都需要把 \ 写两次
     zz <- pipe(paste("sed s/\\\\./,/ >", "outfile"), "w")
     cat(format(round(rnorm(100), 4)), sep = "\n", file = zz)
     close(zz)
     ## 现在查看输出文件:
     file.show("outfile", delete.file = TRUE)
     
     ## 捕获R输出:使用 help(lm) 里面的例子
     zz <- textConnection("ex.lm.out", "w")
     sink(zz)
     example(lm, prompt.echo = "> ")
     sink()
     close(zz)
     ## 现在 `ex.lm.out' 含有需要进一步处理的输出内容
     ## 查看里面的内容,如
     cat(ex.lm.out, sep = "\n")