保存和加载data.frames

时间:2012-11-03 07:02:22

标签: r save dataframe

我根据以下形式的一组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。

3 个答案:

答案 0 :(得分:37)

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

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

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

答案 1 :(得分: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所示),那么您的数据将以表格形式显示。

  

有了你,你总会拥有   能够启动旧版本以读取数据并导出if   他们改变保存格式并且不允许旧格式的某种原因   由另一个函数加载。

要播放魔鬼的adovacate,您可以将此参数与Excel一起使用,并将数据保存为xls。但是,以csv格式保存数据意味着我们永远不必担心这一点。

  

R&#39>文件格式已记录在案,因此可以很容易地进行   使用该打开信息读取另一个系统中的二进制数据。

我完全同意 - 尽管&#34;轻松&#34;有点强。这就是为什么保存为RData文件并不是一件大事。 如果要保存表格数据,为什么不使用csv文件?

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

答案 2 :(得分:10)

save保存数据集的名称以及数据。因此,您不应该为load("data")指定一个名称,您应该没事。换句话说,只需使用:

load("data")

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

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


通过这个简单的例子:

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)只允许您保存单个对象。在某些方面,这是load() doesn't let you preview the contents of the file以来更加“透明”而没有先加载它。