使用 R 中数据包中的多个数据帧

Use multiple dataframes from a package of data in R

我正在使用 R 包中的大型数据集。

我需要将所有单独的数据帧放入我的全局环境中,最好是放入一个数据帧列表中,以便我以后可以使用 lapply 进行一些重复操作。

到目前为止,我已经完成了以下工作:

l.my.package <- data(package="my.package")
lc.my.package <- l.my.package[[3]]
lc.df.my.package <- as.data.frame(lc.my.package)

这有效地创建了一个数据框,其中包含我包中每个 .RData 文件的位置和名称,因此我可以加载它们。

我已经想出如何使用 for 循环加载它们。 我创建了一个路径名向量并将其送入循环:

f <- path('my/path/folder', lc.df.my.package$Item, ext="rdata")
f.v <- as.vector(f)
for (i in f.v) {load(i)}

这会将所有内容加载到单独的数据框中(如我所愿),但显然不会将数据框放入列表中。我认为 lapply 可以在这里工作,但是当我使用 lapply 时,结果列表是一个字符串列表(每个数据框的标题,不包含任何数据)。该代码如下所示:

f.l <- as.list(f)
func <- function(i) {load(i)}
df.list <- lapply(f.l, func)

我正在寻找两种可能的解决方案之一:

  1. 如何有效地将 for 循环的输出收集到列表中(“while”循环可能太慢)?
  2. 如何调整 lapply 以便输出包含每个完整的数据帧,而不仅仅是每个数据帧的标题?

编辑:我还尝试在 lapply 中将“envir=.GlobalEnv”参数引入到 load() 中。当我这样做时,数据帧加载,但仍不在列表中。该列表仍然只包含名称作为字符串。

如果您愿意使用打包解决方案,我写了一个打包调用 libr 可以完全满足您的要求。这是一个例子:


library(libr)

# Create temp directory
tmp <- tempdir()

# Save some data to temp directory
# for illustration purposes
saveRDS(trees, file.path(tmp, "trees.rds"))
saveRDS(rock, file.path(tmp, "rocks.rds"))

# Create library
libname(dat, tmp)
# library 'dat': 2 items
# - attributes: not loaded
# - path: C:\Users\User\AppData\Local\Temp\RtmpCSJ6Gc
# - items:
#    Name Extension Rows Cols   Size        LastModified
# 1 rocks       rds   48    4 3.1 Kb 2020-11-05 23:25:34
# 2 trees       rds   31    3 2.4 Kb 2020-11-05 23:25:34

# Load library
lib_load(dat)

# Examine workspace
ls()
# [1] "dat" "dat.rocks" "dat.trees" "tmp"

# Unload the library from memory
lib_unload(dat)

# Examine workspace again
ls()
# [1] "dat" "tmp"



@rawr 的回复完美无缺:

df.list <- mget(l.my.package$results[, 'Item'], inherits = TRUE)