我知道我可以使用sink()
重定向控制台的输出。例如,我可以编写iris
数据集的列描述:
data(iris)
sink('iris.txt')
writeLines('Description of Iris Dataset:')
cat(str(iris))
sink()
使用所需输出:
生成文件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 ...
我可以使用cat()
做同样的事情吗?我试过了:
con <- file('iris.txt','w')
writeLines('Description of Iris Dataset:',con)
cat(str(iris),file=con,append=TRUE)
close(con)
但只有第一行写入文件。 str()
默默无法写入。
在?cat
&gt;下我们发现的细节:
目前只处理原子矢量和名称 NULL和其他零长度对象(不产生输出)。 字符串按原样输出(与print.default不同) 转义不可打印的字符和反斜杠 - 使用encodeString if 你想用cat输出编码的字符串。其他类型的R对象 应该在被转换之前(例如,通过as.character或格式) 传给了猫。这包括以整数形式输出的因子 载体
在阅读完本文后,我尝试用str(iris)
(无差异)和as.character()
包裹format()
(在第二行添加NULL)。
这可能看起来很挑剔,但我想避免sink()
的原因是因为我想在写入文件之间写一些东西来控制,而打开和关闭接收器是一个额外的步骤。 / p>
答案 0 :(得分:1)
您可以使用capture.output()
将str()
的结果转换为简单的字符向量。
尝试:
cat(capture.output(str(iris)), file=con, append=TRUE, sep="\n")