- R語言經典實例(原書第2版)
- (美)J.D.隆 保羅·蒂特
- 838字
- 2020-08-03 16:43:37
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函數那樣的“副作用”。
- Web程序設計及應用
- UNIX編程藝術
- Learning Flask Framework
- Apache Hive Essentials
- Data Analysis with Stata
- Flux Architecture
- FPGA Verilog開發實戰指南:基于Intel Cyclone IV(進階篇)
- Getting Started with React Native
- ASP.NET Web API Security Essentials
- 跟戴銘學iOS編程:理順核心知識點
- Visual Basic程序設計基礎
- ArcPy and ArcGIS(Second Edition)
- 前端架構設計
- Ubuntu Server Cookbook
- 分布式系統架構與開發:技術原理與面試題解析