从命名列表中提取元素,同时将名称保留在 R 中
Extract elements from a named list while keeping the name in R
我正在尝试从 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 是新列表。有没有有效的方法来做到这一点?
试试这个。您可以使用 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
我们可以使用 map2
从 purrr
library(purrr)
map2(mylist, c(1, 3), `[[`)
-输出
#$var1
#[1] 1
#$var2
#[1] 4
或使用pluck
map2(mylist, c(1, 3), pluck)
或使用 base R
中的 Map
Map(`[[`, mylist, c(1, 3))
-输出
#$var1
#[1] 1
#$var2
#[1] 4
数据
mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2))
您可以使用 pluck
和 list
的组合,如下所示。
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" = .)
我正在尝试从 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 是新列表。有没有有效的方法来做到这一点?
试试这个。您可以使用 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
我们可以使用 map2
从 purrr
library(purrr)
map2(mylist, c(1, 3), `[[`)
-输出
#$var1
#[1] 1
#$var2
#[1] 4
或使用pluck
map2(mylist, c(1, 3), pluck)
或使用 base R
Map
Map(`[[`, mylist, c(1, 3))
-输出
#$var1
#[1] 1
#$var2
#[1] 4
数据
mylist <- list("var1" = c(1,2,3), "var2" = c(10,8,4,2))
您可以使用 pluck
和 list
的组合,如下所示。
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" = .)