R 对于两个结构不同的列表,使用相同的代码按名称获取相同的列

R 对于两个结构不同的列表,使用相同的代码按名称获取相同的列,r,list,R,List,我有两个结构不同的列表。在一个函数中,我想得到一个列,它在两个列表中都有相同的名称。有没有一个通用的方法来处理这个问题 list_1_1_1 <- list(list(list(tibble::tibble("a" = c(1, 2), "b"=c(3, 4))), list("a"=c(1, 2)))) list_1_1_1 # Call column called b list_1_1_1[[1]][[1]][

我有两个结构不同的列表。在一个函数中,我想得到一个列,它在两个列表中都有相同的名称。有没有一个通用的方法来处理这个问题

  list_1_1_1 <- list(list(list(tibble::tibble("a" = c(1, 2), "b"=c(3, 4))), list("a"=c(1, 2))))
  list_1_1_1
  # Call column called b
  list_1_1_1[[1]][[1]][[1]]$b

  
  list_1_1 <- list(list(tibble::tibble("a" = c(1, 2), "b"=c(3, 4))), list("a"=c(1, 2)))
  list_1_1
  # Call column called b
  list_1_1[[1]][[1]]$b

list_1_1_1可能是这样的

foo <- function(l, pattern) {
  u <- unlist(l)
  unname(u[grep(pattern, names(u))])
}

foo(list_1_1_1, "b")
# 3 4

foo(list_1_1, "b")
# 3 4

foo使用外部包,我们可以使用
rrapply
(base-
rappy
的一个扩展,通过嵌套列表递归):

库(rrapply)
rrapply(列表1,条件=函数(x,.xname)。xname==“b”,how=“展平”)
#>b美元
#> [1] 3 4
rrapply(列表1,条件=函数(x,.xname).xname==“b”,how=“展平”)
#>b美元
#> [1] 3 4
条件
参数决定返回哪些列表元素(在本例中为data.frame列),而
.xname
参数的计算结果为正在计算的列表元素的名称(即列名)

对于
grep
s基于
unlist
构造的名称的元素的函数,其优点是可以避免任何意外行为:

foo$a
#> [1] 1 2
#> 
#>一美元
#> [1] 1 2
##数据中不存在“a1”列,但新名称由unlist指定
foo(列表1,a1)
#> [1] 1 1
##这里没有按预期返回任何列
rrapply(列表1,条件=函数(x,.xname)。xname==“a1”,how=“展平”)
#>命名列表()

我不确定我是否理解这个问题;这就是本例中碰巧调用的列。。。