問題
你想把數(shù)據(jù)寫入一個文件。
方案
寫到有分隔符的文本文件
最簡單的方式是用write.csv()
。默認(rèn)情況下乖酬,write.csv()
包含行名,但是這通常沒必要融求,而且可能會導(dǎo)致混亂咬像。
# 一個簡單的例子
data <- read.table(header=TRUE, text='
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保存的數(shù)據(jù)格式
write.csv()
和write.table()
是最適合與其他數(shù)據(jù)分析程序交互操作的函數(shù)县昂。然而,他們不會保持?jǐn)?shù)據(jù)結(jié)構(gòu)的特殊屬性陷舅,如:列是否是一個字符類型或因子倒彰,或因子的水平的順序。為了做到這一點莱睁,它本該在R中被寫成一個特殊的格式待讳。
下面是三種主要的方法:
第一個方法是輸出R源代碼,運行時仰剿,將重新創(chuàng)建該對象创淡。這應(yīng)該對大多數(shù)數(shù)據(jù)對象有用,但它可能無法專一地重現(xiàn)一些較為復(fù)雜的數(shù)據(jù)對象南吮。
# 保存在一個能容易被R載入的文本文件中
dump("data", "data.Rdmpd")
# 能保存多個對象
dump(c("data", "data1"), "data.Rdmpd")
# 再次加載數(shù)據(jù)
source("data.Rdmpd")
# 載入時琳彩,原始的數(shù)據(jù)名稱將被自動使用
另一個方法是,在RDS格式中寫入的個人數(shù)據(jù)對象旨袒。這種格式可以是二進(jìn)制或ASCII汁针。二進(jìn)制更緊湊,而ASCII將與版本控制系統(tǒng)更有效率砚尽,如Git施无。
# 在二進(jìn)制RDS格式中保存一個簡單的對象
saveRDS(data, "data.rds")
# 或,使用ASCII格式
saveRDS(data, "data.rds", ascii=TRUE)
# 再次載入:
data <- readRDS("data.rds")
也可以將多個對象保存到一個單一的文件必孤,使用RData格式猾骡。
# 在二進(jìn)制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()
一個重要的區(qū)別是,使用前者兴想,當(dāng)你用readRDS()
讀取數(shù)據(jù)幢哨,你指定對象的名稱;使用后者嫂便,當(dāng)你用load()
載入數(shù)據(jù)捞镰,會自動使用原來的對象名稱。自動使用原始對象名稱有時可以簡化工作流程毙替,但如果數(shù)據(jù)對象在不同的環(huán)境中使用時岸售,也會成為一個缺點。
原文鏈接:http://www.cookbook-r.com/Data_input_and_output/Writing_data_to_a_file/