我已经根据以下形式的一组twitters创建了一个数据帧:
rdmTweets <- userTimeline("rdatamining", n=200)
df <- do.call("rbind", lapply(rdmTweets, as.data.frame))
Run Code Online (Sandbox Code Playgroud)
现在我用这种方式保存数据框:
save(df, file="data")
Run Code Online (Sandbox Code Playgroud)
如何加载保存的数据框以备将来使用?我用的时候:
df2 <- load("data")
Run Code Online (Sandbox Code Playgroud)
我应用dim(df2)它应该返回数据框有的推文数量,但它只显示1.
sea*_*ody 39
正如@mrdwab指出的那样,save保存名称以及数据/结构(实际上可以在单个文件中保存许多不同的R对象).还有另一对存储功能可以按预期运行.试试这个:
saveRDS(df, file="mytweets.rds")
df2 <- readRDS("mytweets.rds")
Run Code Online (Sandbox Code Playgroud)
这些函数一次只能处理一个对象.
csg*_*pie 13
另一种选择是将数据框保存为csv文件.此选项的好处是它提供长期存储,即您(可能)能够在十年内在任何平台上打开您的csv文件.有了一个RData文件,你只能用R打开它,我不想打赌在版本之间打开它.
要将文件另存为csv,只需使用:read.csv和write.csv,所以:
write.csv(df, file="out.csv", row.name=FALSE)
df = read.csv("out.csv", header=TRUE)
Run Code Online (Sandbox Code Playgroud)
Gavin在下面的评论提出了几点:
CSV路由仅适用于表格式数据.
完全正确.但是,如果要保存数据框(如OP所示),那么您的数据将以表格形式显示.
使用R,您始终可以启动旧版本来读取数据并导出,如果由于某种原因他们更改了保存格式并且不允许旧格式由另一个函数加载.
要玩魔鬼的adovacate,您可以将此参数与Excel一起使用并将数据保存为xls.但是,以csv格式保存数据意味着我们永远不必担心这一点.
记录了R的文件格式,因此可以使用该开放信息轻松地读取另一个系统中的二进制数据.
我完全同意 - 虽然"轻松"有点强烈.这就是为什么保存为RData文件并不是什么大问题.但是,如果要保存表格数据,为什么不使用csv文件?
为了记录,将表格数据保存为RData文件有一些原因.例如,读/写文件或文件大小的速度.
A5C*_*2T1 10
save保存数据集的名称以及数据.因此,你不应该指定一个名字load("data"),你应该没事.换句话说,只需使用:
load("data")
Run Code Online (Sandbox Code Playgroud)
它会将名为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"
Run Code Online (Sandbox Code Playgroud)
如您所见,save允许您一次保存和加载多个对象,这在处理具有多个要保留在一起的数据集的项目时非常方便.
另一方面,saveRDS(从接受的答案)只允许您保存单个对象.在某些方面,这更加"透明",因为load()如果不先加载它就不会让您预览文件的内容.