如何使用cat()将str()输出写入文件?附sink()重定向示例
嘿,我来帮你搞定这个问题~你之前用sink()的方法确实能捕获控制台输出,但如果想直接用cat()配合文件连接来实现,得先搞懂str()的小特性:str()本身是直接把内容打印到控制台的,它的返回值其实是NULL,所以你直接写cat(str(iris))的时候,本质上是在输出NULL,而不是你看到的数据集结构描述。
那正确的做法是先把str()的控制台输出捕获成字符向量,再用cat()写入文件,具体有两种方式:
方法一:直接用cat结合capture.output
data(iris) # 捕获str()的输出内容 str_content <- capture.output(str(iris)) # 写入文件,自定义标题+捕获的内容 cat("Description of Iris Dataset:\n", str_content, sep = "\n", file = "iris.txt")
方法二:使用文件连接对象
如果你习惯用文件连接来操作,也可以这么写:
data(iris) str_content <- capture.output(str(iris)) # 打开写入模式的文件连接 con <- file("iris.txt", "w") # 写入内容 cat("Description of Iris Dataset:\n", str_content, sep = "\n", file = con) # 记得关闭连接 close(con)
这样生成的iris.txt就会包含你想要的内容啦:
Description of Iris Dataset:
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
简单说,capture.output()就是帮你把原本要输出到控制台的内容“抓”下来存成字符串,这样cat()就能正常把它写入文件了~
内容的提问来源于stack exchange,提问作者C8H10N4O2

