如何在R中保存数据框架

7
根据这个问题的答案,您可以使用save()函数将R中的数据框“foo”保存如下:
save(foo,file="data.Rda")

以下是数据框 "df":

> str(df)
'data.frame':   1254 obs. of  2 variables
$ text : chr  "RT @SchmittySays: I love this 1st grade #science teacher from #Duluth http://t.co/HWDYFnIyqV  #NSTA15 #AlbertEinstein #inspirat"| __truncated__ "RT @KVernonBHS: @smrtgrls would love Stellar Girls. Empowering female scientists rocks! #NSTA15 http://t.co/1ZU0yjVF67" "RT @leducmills: Leaving #SXSWedu to go straight to #NSTA15. There should be some sort of arbitrary conference-hopper social med"| __truncated__ "RT @KRScienceLady: Congrats to a wonderful colleague who  helped #ngss Bcome reality, Stephen Pruitt, Distinguished Service to "| __truncated__ ...
$ group: Factor w/ 2 levels "narst","nsta": 2 2 2 2 2 2 2 2 2 2 ...

看起来保存成功了:

> save(df, file = "~/downloads/df.Rda")

但事实证明,只有对象的名称被保存:
> df1 <- load("~/downloads/df.Rda")
> str(df1)
chr "df"

我尝试了上面提到的另一个答案中建议使用的saveRDS()函数,它运行良好,但我想知道为什么save()无法工作。


4
你的问题出在load函数上。把df <- load("~/downloads/df.Rda")改为load("~/downloads/df.Rda")。注意不要改变原来的意思,同时让句子更加通俗易懂。 - Alex
3
@Alex已经有了 - 在执行load时不需要分配,它只会在parent.frame()环境中创建保存的对象 - 在这种情况下是全局工作区。你获得返回文本中的“df”的原因是因为,正如?load所说,该函数返回:一个由创建对象名称组成的字符向量,但不可见。但保存的数据仍应加载到df中。 - thelatemail
我明白了,谢谢你的帮助。 - Joshua Rosenberg
有没有一种聪明的方式在加载时进行分配呢?这个问题也经常困扰我。感谢@thelatemail的解释。 - Alex
2
@Alex - 或许可以这样做 - tmpenv <- new.env(); load("df.Rda",envir=tmpenv); newdf <- tmpenv[["df"]] 或者类似的操作。 - thelatemail
其他有用的建议请参考:http://stackoverflow.com/search?q=[r]+load+environment+is%3Aanswer - thelatemail
1个回答

6
您可能想要查看这里的问题:R数据格式:RData,Rda,Rds等
当加载一个.rda对象时,你会将所有对象和它们的原始名称加载到全局环境中。您不能使用load给对象分配新名称,就像您尝试做的那样。
如果您想保存可以稍后用不同名称加载的对象,则应使用.rds格式(saveRDSreadRDS)。如果您想在一个.rds文件中保存多个对象,最简单的解决方案是将它们全部放在列表中,仅保存列表。如果在读取.rds后您想将列表中的对象放入全局环境中,则可以使用list2env

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接