如何将数据文件保存为 .RData 格式?

85

我想将数据保存在一个 .RData 文件中。

例如,我想将两个 csv 文件和一些信息保存到 1.RData 中。

这里,我有两个 csv 文件

1) file_1.csv contains object city[[1]]
2) file_2.csv contains object city[[2]]

并且还需要按以下方式保存其他值,即国家和人口。 因此,我想首先从两个csv文件中创建'city'对象。

1.RData的结构可能如下所示:

> data = load("1.RData")

> data
[1] "city"  "country"  "population"

> city
  [[1]]               
  NEW YORK         1.1
  SAN FRANCISCO    3.1

  [[2]]
  TEXAS            1.3
  SEATTLE          1.4

> class(city)
  [1] "list"

> country
  [1] "east"  "west"  "north"

> class(country)
  [1] "character"

> population
  [1] 10  11  13  14   

> class(population)
  [1] "integer"

file_1.csvfile_2.csv都有很多行和列。

我该如何使用csv文件和值创建这种类型的RData?

3个回答

101

另外,当您想要保存单个 R 对象时,我建议使用 saveRDS

您可以使用 saveRDS 保存 R 对象,然后使用新变量名使用 readRDS 将它们加载到 R 中。

例如:

# Save the city object
saveRDS(city, "city.rds")

# ...

# Load the city object as city
city <- readRDS("city.rds")

# Or with a different name
city2 <- readRDS("city.rds")

但是,如果你想保存工作空间中的许多/全部对象,请使用 Manetheran 的回答。


3
我不知道为什么这个方法没有被更广泛地推荐或者知道。通常它比“保存/加载”更好的解决方案。 - Konrad Rudolph
2
@KonradRudolph 为什么saveRDS更好?使用save/load,您需要使用save(object, file)newObject <- load(file)。而对于RDS,您需要使用saveRDS(object, file)newObject <- readRDS(file)。它们在我看来很相似,但是多打几个键使用saveRDSreadRDS。我想我可能漏掉了什么。 - Dr. Beeblebrox
12
@jabberwocky 默认情况下,load 函数会将对象转储到您的全局环境中。这是一个糟糕的想法。您需要通过使用 readRDS 函数来获得控制权。R 的 load 函数在这里积极推广不良实践。 - Konrad Rudolph
5
考虑这种情况:假设你保存了矩阵 test,使用 save(test, file = "example.Rdata")。然后你稍后将 test 定义为其他内容(比如,test <- c(1:100))。当你执行 load("example.Rdata") 时会发生什么?它将替换新定义的 test 变量。另一种情况:如果你需要已保存在 example.rdata 中的数据,但想保留新定义的 test 变量,你能否使用 loadexample.Rdata 轻松加载到一个新变量中,比如 test3 - ialm
2
我在 save 函数中发现的实用性是,可以保存我的 R 环境;但若要保存单独的 R 对象,则我认为 saveRDSreadRDS 更加优秀。 - ialm
显示剩余2条评论

93

有三种方法可以保存你的R会话中的对象:

保存R会话中的所有对象:

save.image()函数将保存当前在你的R会话中的所有对象:

save.image(file="1.RData") 

这些对象可以使用load()函数加载到新的R会话中:

load(file="1.RData")

保存R会话中的一些对象:

如果您想保存某些但不是全部对象,可以使用 save() 函数:

save(city, country, file="1.RData")

再次使用load()函数,可以将这些内容重新加载到另一个R会话中:

load(file="1.RData") 

保存单个对象

如果您想要保存单个对象,可以使用saveRDS()函数:

saveRDS(city, file="city.rds")
saveRDS(country, file="country.rds") 

您可以使用readRDS()函数将它们加载到 R 会话中,但您需要将结果分配给所需的变量:

city <- readRDS("city.rds")
country <- readRDS("country.rds")

但这也意味着,如果需要的话(即在新的 R 会话中已经存在变量但包含不同对象),您可以为这些对象提供新的变量名称:

city_list <- readRDS("city.rds")
country_vector <- readRDS("country.rds")

13
这是一个不错的回答。加上相应的load()指令的附加行会让它更好,以我个人的看法。 - Assad Ebrahim

1

如果需要,您可以添加一个额外的功能。您可以在命名位置中包含一个变量,例如日期标识符。

date <- yyyymmdd
save(city, file=paste0("c:\\myuser\\somelocation\\",date,"_RData.Data")

这样,您就可以随时检查运行时间。

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