Как динамически получить доступ к определенному атрибуту в списке фреймов данных - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть данные, которые представляют собой список фреймов данных.Я пытаюсь получить доступ к определенному атрибуту внутри каждого из фреймов данных в списке.Можно извлечь конкретный атрибут 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)))

1 Ответ

0 голосов
/ 11 февраля 2019

Кажется, что вы можете легко это сделать с помощью пакета purrr.Например,

library(purrr)
new_data %>% map(pluck, 1, attr_getter("SpotfireColumnMetaData"), "DP.UniqueId")
# $A
# [1] "A-024"
# $B
# [1] "B-025"

map() будет перебирать исходный список, а затем pluck() может позаботиться о глубоком извлечении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...