官术网_书友最值得收藏!

4.18 保存和傳送對象

4.18.1 問題

你希望保存一個或多個R對象以便于以后使用,或者希望將該R對象從一臺計算機復制到另一臺計算機。

4.18.2 解決方案

使用save函數將對象寫入文件:


save(tbl, t, file = "myData.RData")

在自己的計算機或其他支持R軟件的平臺中,使用load函數讀取該文件的內容:


load("myData.RData")

函數save以二進制數據方式保存數據。若要以ASCII碼格式保存,可以使用dput或dump函數:


dput(tbl, file = "myData.txt")
dump("tbl", file = "myData.txt")    # Note quotes around variable name

4.18.3 討論

假設你發現自己需要將大型復雜數據對象加載到其他工作空間,或者想要在Linux系統和Windows系統之間移動R對象。load和save函數能幫助你完成以下這些操作:save函數能將對象存儲在一個跨平臺的可攜帶的文件中;load函數能讀取這類文件。

當使用load函數時,其本身不會返回數據,而是在工作空間中創建一些變量,將文件中的數據加載到這些變量中,然后(以向量的形式)返回變量的名稱。第一次運行load函數時,你可能會想要這樣做:


myData <- load("myData.RData")     # Achtung! Might not do what you think

我們來看看myData是什么:


myData
#> [1] "tbl" "t"
str(myData)
#>  chr [1:2] "tbl" "t"

這可能令人費解,因為myData根本不包含你的數據。第一次遇到它時,這可能會讓人感到困惑和沮喪。

還有一些其他事情要記住。首先,save函數以二進制格式寫入文件,以防止文件過大,有時你需要以ASCII碼格式輸出。例如,當你向郵件列表或Stack Overflow提交問題時,同時包含一段ASCII碼數據代碼可以允許其他人重現問題。在這種情況下,可以使用dput或dump函數,它將結果以ASCII碼格式輸出。

對特殊R包中的對象進行保存和加載時尤其需要注意。加載對象時,R不會自動加載所需的R包,因此除非你之前自己加載了包,否則它無法“理解”該對象的內容。例如,假設我們有一個由zoo包創建的名為z的對象,我們將該對象保存在一個名為z.RData的文件中。以下命令會造成系統的誤解:


load("./data/z.RData")   # Create and populate the z variable
plot(z)                  # Does not plot as expected: zoo pkg not loaded

圖4-3顯示了得到的圖像,它只是一些點。

圖4-3:沒有加載zoo包時的繪圖結果

我們需要在顯示或繪制zoo數據前,先載入zoo包如下:


library(zoo)           # Load the zoo package into memory
load("./data/z.RData") # Create and populate the z variable
plot(z)                # Ahhh. Now plotting works correctly

你可以在圖4-4中看到結果。

圖4-4:加載zoo包后的繪圖結果

4.18.4 另請參閱

如果你只是保存并加載單個數據框或其他R對象,則應考慮write_rds和read_rds函數。這些函數沒有像load函數那樣的“副作用”。

主站蜘蛛池模板: 郸城县| 应用必备| 日喀则市| 吉林省| 铜山县| 泾阳县| 民乐县| 永宁县| 阿坝县| 商洛市| 潮州市| 闽侯县| 神池县| 黔东| 左贡县| 封开县| 安福县| 赤城县| 内乡县| 托克逊县| 西充县| 綦江县| 巢湖市| 丰原市| 崇阳县| 图木舒克市| 吴桥县| 广河县| 安吉县| 德格县| 鄂尔多斯市| 普宁市| 绥江县| 义马市| 正蓝旗| 瓦房店市| 应城市| 蒙山县| 盐池县| 长宁县| 南涧|