首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存和加载data.frames

保存和加载data.frames
EN

Stack Overflow用户
提问于 2012-11-03 15:02:22
回答 3查看 58.1K关注 0票数 26

我基于一组twitter制作了一个数据帧,格式如下:

代码语言:javascript
复制
 rdmTweets <- userTimeline("rdatamining", n=200)
 df <- do.call("rbind", lapply(rdmTweets, as.data.frame))

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

代码语言:javascript
复制
 save(df, file="data")

如何加载已保存数据框以供将来使用?当我使用:

代码语言:javascript
复制
  df2 <- load("data")

我应用dim(df2),它应该返回数据帧的tweet数量,但它只显示1。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-03 16:13:59

正如@mrdwab指出的那样,save保存名称和数据/结构(实际上可以在单个文件中保存许多不同的R对象)。还有一对存储函数的行为更符合您的预期。试试这个:

代码语言:javascript
复制
saveRDS(df, file="mytweets.rds")
df2 <- readRDS("mytweets.rds")

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

票数 44
EN

Stack Overflow用户

发布于 2012-11-03 17:23:46

另一种选择是将数据框另存为csv文件。此选项的好处是它提供了long term存储,也就是说,您将(很可能)能够在十年内在任何平台上打开您的csv文件。对于RData文件,你只能用R打开它,我不想打赌在不同版本之间打开它。

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

代码语言:javascript
复制
write.csv(df, file="out.csv", row.name=FALSE)
df = read.csv("out.csv", header=TRUE)

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

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

完全正确。但是如果你要保存一个数据框(就像OP一样),那么你的数据就是表格形式的。

使用R的

,如果由于某些原因更改了保存格式,并且不允许其他函数加载旧格式,您将始终能够启动旧版本来读取数据并导出。

要发挥魔力,您可以在Excel中使用此参数,并将数据另存为xls。但是,将数据保存为csv格式意味着我们永远不需要担心这一点。

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

我完全同意这一点--尽管“容易”这个词有点强势。这就是为什么另存为RData文件并不是什么大问题。如果你要保存表格数据,为什么不使用csv文件?

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

票数 13
EN

Stack Overflow用户

发布于 2012-11-03 15:06:24

save保存数据集的名称和数据。因此,您不应该为load("data")指定名称,您应该没有问题。换句话说,只需使用:

代码语言:javascript
复制
load("data")

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

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

完成这个简单的示例:

代码语言:javascript
复制
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允许您一次保存和加载多个对象,这在处理包含多个要保留的数据集的项目时非常方便。

另一方面,(来自the accepted answer的) saveRDS仅允许您保存单个对象。在某些方面,这更加“透明”,因为load() doesn't let you preview the contents of the file不需要先加载它。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13206876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档