从命名列表中提取元素,同时将名称保留在R中

时间:2020-10-15 17:38:56

标签: r list extract

我正在尝试从R中的列表中提取单个元素,并将其向量名称存储为新列表。

让我们假设我有一个名为mylist的列表,其中包含任意数量的命名向量,并且每个向量的长度可以变化,例如

mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2), "var3" = c(6,3), ...)

我知道我可以通过使用向量的名称或索引来获取单个元素,例如

mylist[["var1"]][1]
[1] 1
mylist[[2]][3]
[1] 4

但是,这些只是值。我想要的是从这个提取的值创建一个新列表,并使用从中提取它的向量的原始名称,例如

element1
$var1
[1] 1

element2
$var2
[1] 4

其中element1和element2是新列表。有有效的方法吗?

3 个答案:

答案 0 :(得分:0)

尝试一下。您可以使用mapply()定义具有两个元素的函数:列表x和向量n,其中包含要提取的元素的所需位置。这样,您可以使用索引包装函数,以获得接近您期望的列表L。这里的代码:

#Data
mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2))
#List
L <- mapply(function(x,n) x[n],x=mylist,n=c(1,3),SIMPLIFY = F)

输出:

L
$var1
[1] 1

$var2
[1] 4

答案 1 :(得分:0)

我们可以使用map2中的purrr

library(purrr)
map2(mylist, c(1, 3), `[[`)

-输出

#$var1
#[1] 1

#$var2
#[1] 4

或使用pluck

map2(mylist, c(1, 3), pluck)

或者使用Map中的base R

Map(`[[`, mylist, c(1, 3))

-输出

#$var1
#[1] 1

#$var2
#[1] 4

数据

mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2))

答案 2 :(得分:0)

您可以使用plucklist的组合,如下所示。

library(purrr)
mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2), "var3" = c(6,3))
element1 <- mylist %>% pluck("var1") %>% .[1] %>% list("var1" = .)
element2 <- mylist %>% pluck("var2") %>% .[3] %>% list("var2" = .)
相关问题