r - 检索 rData 文件中所有 data.frame 类对象的路径
问题描述
我有多个 .rData 文件,其顶级全局环境变量是 data.frames、列表、深度嵌套列表的混合。我知道许多嵌套列表中都有 data.frame 类型,但我无法检索到它们的路径。
在使用以下代码使用另一种类型的类之前,我遇到过类似的问题
names(rapply(mget(ls(.GlobalEnv), envir=.GlobalEnv), length, classes="fluor.spectral.data", how="unlist"))
虽然不是最优雅的解决方案,但它很快就达到了我的需要。返回诸如“Fluor.Spec.WA.M12.SC.13”之类的名称,然后允许我在格式化“。”后操纵对象 进入'$'。
有人可以帮我检索所有 data.frame 类类型的路径,嵌套或以其他方式在高度可变的 .rData 文件中吗?提前致谢
解决方案
如果要返回全局环境中加载的所有 data.frame,无论是作为单个对象还是作为嵌套列表的元素,请在 -package 中使用rrapply
(rrapply
base 的扩展rrapply
)。
library(rrapply)
w <- data.frame(1)
x <- list(1, 2, 3)
y <- 5
z <- list(1, 2, list(1, df = data.frame(a = 1, b = 2)))
rrapply(as.list(.GlobalEnv), classes = "data.frame", how = "flatten")
#> $w
#> X1
#> 1 1
#>
#> $df
#> a b
#> 1 1 2
设置classes = "data.frame"
避免递归到 data.frame 列(就像 baserapply
一样),并将how = "flatten"
收集到的 data.frames 作为扁平列表返回。
注意:如果要将完整的对象路径返回到找到的 data.frames,请设置how = "prune"
而不是how ="flatten"
:
rrapply(as.list(.GlobalEnv), classes = "data.frame", how = "prune")
#> $w
#> X1
#> 1 1
#>
#> $z
#> $z[[1]]
#> $z[[1]]$df
#> a b
#> 1 1 2
编辑:为了还返回存在于某些 S4 类插槽中的 data.frames,扩展上述调用的一种可能方法是:
## define S4-class with a data.frame in "df" slot
userClass <- setClass("user", slots = c(df = "data.frame"))
v <- userClass(df = data.frame(user = 1))
rrapply(as.list(.GlobalEnv),
classes = c("data.frame", "user"),
f = function(x) {
if(class(x) == "user") {
slot(x, "df")
} else {
x
}
},
how = "flatten")
#> $v
#> user
#> 1 1
#>
#> $w
#> X1
#> 1 1
#>
#> $df
#> a b
#> 1 1 2
在这种情况下,classes = c("data.frame", "user")
将检查 class 的 data.frames 和 S4-objects "user"
。f
应用于对象的函数,如果它是一个 data.frame,则返回对象本身;如果它"df"
是一个 S4 对象,则返回槽。
请注意,此代码假定已知 S4 类名称以及包含 data.frame 对象的插槽。
推荐阅读
- git - Github如何更新分叉的repo,和新分叉的完全一样
- docker - 无法将 localhost 与 Docker 容器一起使用
- python - 为什么未定义 selectedimage?
- android - Android上的FileDataStoreFactory和posix?
- node.js - 使函数强类型时,节点 api 服务上出现意外的令牌“:”
- javascript - 反应日期选择器和时刻
- xslt-2.0 - 在 XSLT 中对数据进行分组后计算行数
- f# - 是否可以编写一个将文件(SFTP)传输到远程服务器并在该服务器上运行一些 docker 命令的 FAKE 构建脚本?
- amazon-dynamodb - Flink 运动连接器 - KCL
- mysql - SQL查询以分组方式查找最大值的行