r - 如何动态访问数据框列表中的特定属性
问题描述
我有一个数据,它是一个数据框列表。我正在尝试访问列表中每个数据框内的特定属性。DP.UniqueId
可以使用以下代码提取特定属性。
> attr(new_data$A$AA, "SpotfireColumnMetaData")$DP.UniqueId
[1] "A-024"
这种方法的问题在于它不是动态的。此外,我拥有的大数据列表中有数千个数据框,对于每个数据框,我都想提取这个特定DP.UniqueId
属性。
如果我必须动态应用lapply()
或for loop()
获取此属性,则必须将其引用为:
> attr(new_data[1][1], "SpotfireColumnMetaData")$DP.UniqueId
NULL
但它看起来像R
,attr()
不能像上面的代码那样被引用。有没有办法动态提取特定属性并将其存储在数据框中?
数据
new_data <- list(A = structure(list(AA = structure(5.49485, SpotfireColumnMetaData = list(
DP.TestNumber = "111", DP.Type = "", DP.TestName = "ABC",
DP.Info = "PTR", DP.TestUnit = "Mohm", DP.Statistic = "raw",
DP.Program = "", DP.ScaleFactor = 0L, DP.FilteredOutCells = 0L,
Limits.Prod.Lower = 2, Limits.Prod.Target = NaN, Limits.Prod.Upper = 7,
Limits.Spec.Lower = -Inf, Limits.Spec.Target = NaN, Limits.Spec.Upper = Inf,
Limits.Outlier.Lower = -Inf, Limits.Outlier.Target = NaN,
Limits.Outlier.Upper = Inf, Limits.Whatif.Lower = -Inf, Limits.Whatif.Target = NaN,
Limits.Whatif.Upper = Inf, DP.ParamType = "PARAMETRIC", DP.BlockId = "",
DP.Scratch = "", DP.ColumnId = "", Dp.BaseName = "", DP.FTR.testtxt = "",
DP.PTR.testtxt = "A -1 <> B", DP.DTR.textdat = "",
DP.MPR.pinnum = "0", DP.UniqueId = "A-024"))), class = "data.frame", row.names = c(NA,-1L)),
B = structure(list(BB = structure(0.08707662, SpotfireColumnMetaData = list(
DP.TestNumber = "112", DP.Type = "", DP.TestName = "ABC",
DP.Info = "PTR", DP.TestUnit = "Mohm", DP.Statistic = "raw",
DP.Program = "", DP.ScaleFactor = 0L, DP.FilteredOutCells = 0L,
Limits.Prod.Lower = 2, Limits.Prod.Target = NaN, Limits.Prod.Upper = 7,
Limits.Spec.Lower = -Inf, Limits.Spec.Target = NaN, Limits.Spec.Upper = Inf,
Limits.Outlier.Lower = -Inf, Limits.Outlier.Target = NaN,
Limits.Outlier.Upper = Inf, Limits.Whatif.Lower = -Inf, Limits.Whatif.Target = NaN,
Limits.Whatif.Upper = Inf, DP.ParamType = "PARAMETRIC", DP.BlockId = "",
DP.Scratch = "", DP.ColumnId = "", Dp.BaseName = "", DP.FTR.testtxt = "",
DP.PTR.testtxt = "A -1 <> B", DP.DTR.textdat = "",
DP.MPR.pinnum = "0", DP.UniqueId = "B-025"))), class = "data.frame", row.names = c(NA,-1L)))
解决方案
似乎您可以使用该purrr
软件包轻松完成此操作。例如
library(purrr)
new_data %>% map(pluck, 1, attr_getter("SpotfireColumnMetaData"), "DP.UniqueId")
# $A
# [1] "A-024"
# $B
# [1] "B-025"
将map()
遍历初始列表,然后pluck()
可以处理深度提取。
推荐阅读
- html - 切换开关(HTML + CSS)工作/不工作
- node.js - 在猫鼬中将项目推送到具有数组属性的对象数组中
- python - 为什么 wxPython 没有安装
- javascript - 使用 setAttribute() 将 onkeyup 函数添加到函数中带有文本参数的 DOM 元素
- c++ - 如何在模板中转发通用结构的初始化参数?
- c - 根据 C 标准,int 的大小是多少?
- c++ - Why is my struct constructor, which contains other structs, not working?
- python - 关于 python 上 sort() 方法的一些问题
- javascript - mongoose find() 方法不是服务调用中的函数错误
- list - 在 Flutter 中调用函数时遇到空引用问题