3

这是非常基本的(我怀疑这已经在其他地方被问过了,虽然不是在这里)。

我有大量的 .rda 文件,每个文件都有一个数据框。我想对每个数据框进行计算,因此需要加载它们(load())。如果他们是 .RDS 对象,我会喜欢:

#My data
x <- data.frame(a=1:3)
y <- data.frame(a=3:6)

#Save as RDS 
saveRDS(x, file = "x.rds")
saveRDS(y, file = "y.rds")

files <- c("x.rds", "y.rds")
data <- lapply(files, readRDS)

#Do something with the data in the list "data"

我怎么能做类似的事情,load因为你不能将数据 - 只有名称 - 分配给变量:

x <- data.frame(a=1:3)

> x
  a
1 1
2 2
3 3

save(x, file= "x.rda")
x <- load("x.rda")

> x
[1] "x"
4

2 回答 2

4

如果您确定所有文件只包含一个对象,则可以利用包装函数中的envir参数,如下所示:load

load_object <- function(file) {
  tmp <- new.env()
  load(file = file, envir = tmp)
  tmp[[ls(tmp)[1]]]
}

用法如下:

not_x <- data.frame(xx = 1:5)
save(not_x, file = "~/tmp/x.Rdata") 

(x <- load_object("~/tmp/x.Rdata"))
#  xx
#1  1
#2  2
#3  3
#4  4
#5  5

all.equal(not_x, x)
#[1] TRUE
于 2016-01-21T14:52:10.193 回答
0

您想通过以下方式使用基本get功能:

> # My data
> x <- data.frame(a=1:3)
> y <- data.frame(a=4:6)

> # Save as RDA 
> save(x, file = "x.rda")
> save(y, file = "y.rda")

> files <- c("x.rda", "y.rda")
> data <- lapply(lapply(files, load), get)

> data
[[1]]
  a
1 1
2 2
3 3

[[2]]
  a
1 4
2 5
3 6
于 2016-01-21T14:44:21.813 回答