【发布时间】:2021-05-27 03:01:51
【问题描述】:
我正在使用 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)
我正在寻找两种可能的解决方案之一:
- 如何有效地将 for 循环的输出收集到一个列表中(“while”循环可能太慢了)?
- 如何调整 lapply 以使输出包含每个完整的数据帧,而不仅仅是每个数据帧的标题?
编辑:我还尝试在 lapply 中将“envir=.GlobalEnv”参数引入 load()。当我这样做时,数据框会加载,但仍然不在列表中。该列表仍然只包含作为字符串的名称。
【问题讨论】:
-
你试过
get/mget吗?df.list <- mget(l.my.package$results[, 'Item'], inherits = TRUE) -
@rawr mget 是一个非常简单的解决方案!谢谢!我不知道我一开始是怎么错过的 :)