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=“展平”)
#>命名列表()
我不确定我是否理解这个问题;这就是本例中碰巧调用的列。。。