我正在尝试从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是新列表。有有效的方法吗?
答案 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)
您可以使用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" = .)