问题

如果你想将数据写进一个文件,应该怎样操作?

解决方案

写入分隔符文本文件

用 write.csv() 将数据写入一个文件是最简单的方法。 write.csv() 默认包括行名,但是这通常是不必要的,这种默认可能会导致迷惑。# 一个样本数据框data 

subject sex size       1   M    7
2   F    NA
3   F    9
4   M   11

')# 写入文件,取消默认行名write.csv(data, "data.csv", row.names=FALSE)# 同上,只是‘NA’由空白格代替write.csv(data, "data.csv", row.names=FALSE, na="")# 使用制表符,取消行名和列名write.table(data, "data.csv", sep="\t", row.names=FALSE, col.names=FALSE)

保存为 R 数据格式

write.csv() 和 write.table() 与其它数据分析程序的互操作性是最好的。然而,它们不会保护数据结构的特殊属性,如列是否为字符型或因素,或者因素水平的顺序。为了做到这一点,它需要在特殊的 R 格式下写出来。

下面是三种主要的方法:

第一个方法:输出R源代码,运行时,将重新创建该对象。这针对大多数数据对象,但它可能无法重建一些更复杂的数据对象。# 保存为文本格式,容易被 R 加载dump("data", "data.Rdmpd")# 可以保存多个对象dump(c("data", "data1"), "data.Rdmpd")# 重新加载数据 source("data.Rdmpd")# 当加载数据时,原始数据的名称将自动被使用

下一个方法是写出 RDS 格式的数据对象,这种格式可以是二进制的,也可以是 ASCII。二进制格式更紧凑,ASCII 格式在像 Git 版本控制系统时则更高效。# 二进制 RDS 格式保存单个对象saveRDS(data, "data.rds")# 或者,用 ASCII 格式saveRDS(data, "data.rds", ascii=TRUE)# 重新加载数据data 

用 RData 格式可以将多个对象保存到一个的文件.# 二进制 RData 格式保存多个对象save(data, file="data.RData")# 或者,用 ASCII 格式save(data, file="data.RData", ascii=TRUE)# 可以保存多个对象save(data, data1, file="data.RData")# 重新加载数据load("data.RData")

saveRDS() 和 save()最重要的区别:当你用 saveRDS() 保存数据时,你指定对象的名称;当你用 save() 加载数据时,它将自动使用原始对象的名称。自动使用原始对象名称有时可以简化工作流程,但是当它在不同的环境中使用将数据分配给其它对象时也是有缺点的。