从 R 里面导出结果通常是一个很少争论的事情,但是实际操作中仍然 有一些问题。在知道目标应用软件前提下,通常把文本文件作为最为便利的 中间转换工具。(如果需要二进制文件,见二进制文件(Binary files) 一章)。
函数 cat 是导出数据的函数的基础。它有一个file参数
和append。通过连续地调用 cat 对一个文本文件写入。
最好的方式是,特别需要多次这样做的时候,首先为写入或添加文本
打开一个 file 连接,然后用cat连接,最后关掉
(close)它。
最常见的工作是把一个矩阵或数据框以数字的矩形网格方式写入文件中,
而且还可能保留行列的标签。
这可以通过函数write.table 和 write 来完成。
函数write仅可以写出一个矩阵或向量的特定列(和对一个矩阵进行转置)。
函数 write.table 更为便利,它可把一个数据框(
或一个可以强制转换为数据框的对象)以包含行列标签的方式写出。
在把一个数据框写入到一个文本文件中时,有许多问题需要考虑。
大多数通过这些函数对实/复数的转换是全精度的,但是用write时,
精度由options(digits)的当前设置确定。
如果需要更多的控制,在一个数据框上逐列使用
format 。
R 倾向在首行不出现表示行名字的条目,因此 在文件里面
dist climb time
Greenmantle 2.5 650 16.083
...
其它一些系统需要给行名字一个条目(可能为空),此时,
可以通过在write.table 中
设置参数col.names = NA 来实现。
write.csv提供了适当的默认值。
在一些本地系统中,逗号作为十进制位中的小数点
(在write.csv函数中设置参数dec = ",")
1
,此时CSV文件以分号作为字段分隔符:
write.csv2 设置了适当的默认值。
用分号或制表符(sep = "\t")可能是一种
比较安全的选择。
NA 形式输出,但这可以通过参数
na来改变。
注意,NaN 在write.table里面
以 NA 看待,但在cat 或
write里面是区别对待的。
quote 控制着字符和因子变量的引号引用问题。
需要注意字符串中的引号嵌套问题。三种 有用的形式如下
> df <- data.frame(a = I("a \" quote"))
> write.table(df)
"a"
"1" "a \" quote"
> write.table(df, qmethod = "double")
"a"
"1" "a "" quote"
> write.table(df, quote = FALSE, sep = ",")
a
1,a " quote
逃逸(Escape)的第二种形式常用于电子表格中。
包 MASS 中的函数 write.matrix 为写矩阵
提供了一种专用的接口。它同时提供了以区块方式写的可选项,这样
可以降低内存的使用。
用 sink 可能把标准 R 输出重定向到一个文件中,因此
捕获了 print 语句(可能是暗含的)的输出。通常,
这不是最有效的办法,options(width)设置可能需要增加。
包 foreign里面的函数 write.foreign 用
write.table 产生文本文件,同时编写一个
可以让另外一个统计包读入该文本文件的代码文件。现在支持
导出到 SPSS 和 Stata。