Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何动态访问数据帧列表中的特定属性_R_List_Dataframe_Attributes - Fatal编程技术网

R 如何动态访问数据帧列表中的特定属性

R 如何动态访问数据帧列表中的特定属性,r,list,dataframe,attributes,R,List,Dataframe,Attributes,我有一个数据框列表。我试图访问列表中每个数据帧内的特定属性。可以使用下面的代码提取特定属性DP.UniqueId > attr(new_data$A$AA, "SpotfireColumnMetaData")$DP.UniqueId [1] "A-024" 这种方法的问题在于它不是动态的。此外,我拥有的大数据在列表中有数千个数据帧,对于每个数据帧,我要提取这个特定的DP.UniqueId属性 如果我必须应用lappy()或for loop()来动态获取此属性,那么我必须将其引用为: &g

我有一个数据框列表。我试图访问列表中每个数据帧内的特定属性。可以使用下面的代码提取特定属性
DP.UniqueId

> attr(new_data$A$AA, "SpotfireColumnMetaData")$DP.UniqueId
[1] "A-024"
这种方法的问题在于它不是动态的。此外,我拥有的大数据在列表中有数千个数据帧,对于每个数据帧,我要提取这个特定的
DP.UniqueId
属性

如果我必须应用
lappy()
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)))

new_data似乎您可以通过
purr
包轻松完成这一任务。比如说

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

map()
将迭代初始列表,然后
pluck()
可以进行深度提取。

@MrFlick-谢谢。是否可以将这些ID分配为列表中各个数据帧的第一行?不确定确切的含义。这是另一个问题吗?@flick-是的。我忘了把它写在问题里。请检查更新。就我第一次问的问题而言,你的回答是正确的。你真的不应该在问题得到回答后改变问题。你应该问一个新问题。基本上你问的是一些不同的问题:基本上,如何向列表中的每个data.frame添加新行…@MrFlick-我同意。请检查这个。我避免问新问题,以确保我不会受到StackOverflow的限制,因为我什么时候可以问下一个问题。即使给出了很好的重复性示例,我也不会获得投票(即使问题得到了回答),这会触发StackOverflow的算法。