保存和加载data.frames

问题描述 投票:24回答:3

我已经根据以下形式的一组twitters创建了一个数据帧:

 rdmTweets <- userTimeline("rdatamining", n=200)
 df <- do.call("rbind", lapply(rdmTweets, as.data.frame))

现在我用这种方式保存数据框:

 save(df, file="data")

如何加载保存的数据框以备将来使用?我用的时候:

  df2 <- load("data")

我应用dim(df2)它应该返回数据框有的推文数量,但它只显示1。

r save dataframe
3个回答
37
投票

正如@mrdwab指出的那样,save保存了名称以及数据/结构(实际上可以在一个文件中保存许多不同的R对象)。还有另一对存储功能可以按预期运行。试试这个:

saveRDS(df, file="mytweets.rds")
df2 <- readRDS("mytweets.rds")

这些函数一次只能处理一个对象。


13
投票

另一种选择是将数据框保存为csv文件。此选项的好处是它提供长期存储,即您(可能)可以在十年内在任何平台上打开您的csv文件。使用RData文件,你只能用R打开它,我不想打赌在版本之间打开它。

要将文件另存为csv,只需使用:read.csvwrite.csv,所以:

write.csv(df, file="out.csv", row.name=FALSE)
df = read.csv("out.csv", header=TRUE)

Gavin在下面的评论提出了几点:

CSV路由仅适用于表格式数据。

完全正确。但是,如果要保存数据框(如OP所示),那么您的数据将以表格形式显示。

使用R,您始终可以启动旧版本来读取数据并导出,如果由于某种原因他们更改了保存格式并且不允许旧格式由另一个函数加载。

要玩魔鬼的拥护者,你可以在Excel中使用这个参数并将你的数据保存为qazxsw poi。但是,以csv格式保存数据意味着我们永远不必担心这一点。

记录了R的文件格式,因此可以使用该开放信息轻松地读取另一个系统中的二进制数据。

我完全同意 - 虽然“轻松”有点强烈。这就是为什么保存为RData文件并不是什么大问题。但是,如果要保存表格数据,为什么不使用csv文件?

为了记录,将表格数据保存为RData文件有一些原因。例如,读/写文件或文件大小的速度。


10
投票

xls保存数据集的名称以及数据。因此,你不应该为save指定一个名字,你应该没事。换句话说,只需使用:

load("data")

它会将名为load("data") 的对象(或文件“data”中包含的任何内容)加载到当前工作空间中。

我建议为您的文件建议一个更原始的名称,并考虑添加一个扩展名,以帮助您记住脚本文件是什么,您的数据文件是什么,等等。


通过这个简单的例子来解决问题:

df

如您所见,rm(list = ls()) # Remove everything from your current workspace ls() # Anything there? Nope. # character(0) a <- 1:10 # Create an object "a" save(a, file="myData.Rdata") # Save object "a" ls() # Anything there? Yep. # [1] "a" rm(a) # Remove "a" from your workspace ls() # Anything there? Nope. # character(0) load("myData.Rdata") # Load your "myData.Rdata" file ls() # Anything there? Yep. Object "a". # [1] "a" str(a) # Is "a" what we expect it to be? Yep. # int [1:10] 1 2 3 4 5 6 7 8 9 10 a2 <- load("myData.Rdata") # What about your approach? ls() # Now we have 2 objects # [1] "a" "a2" str(a2) # "a2" stores the object names from your data file. # chr "a" 允许您一次保存和加载多个对象,这在处理具有多组数据的项目时非常方便。

另一方面,save(来自saveRDS)只允许您保存单个对象。在某些方面,这更加“透明”,因为the accepted answer没有先加载它。

© www.soinside.com 2019 - 2024. All rights reserved.