如何从R中的列表中进行子集化

use*_*894 29 r list sapply

我有一个相当简单的任务,但没有找到一个好的解决方案.

> mylist  
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

[[3]]
[1] 25 26 27 28 29 30 31 32

y <- c(3,5,9)    
Run Code Online (Sandbox Code Playgroud)

我想从提取MYLIST子元素3,5和列表中的每个组件的9.我试过了,sapply[mylist,"[[",y]但没有运气!和其他人喜欢vapply,lapply等等.提前感谢您的帮助

Mauricio Ortiz

sgi*_*ibb 31

你可以使用sapply(mylist, "[", y):

mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
Run Code Online (Sandbox Code Playgroud)


jor*_*ran 22

尝试使用[而不是[[(并取决于你实际想要的光之后lapply).

来自?'[[':

[,[[和$]之间最重要的区别是[可以选择多个元素,而另外两个选择单个元素.


USE*_*R_1 7

使用lapply:

# create mylist
list1<-1:10
list2<-letters[1:26]
list3<-25:32
mylist<-list(list1,list2,list3)

# select 3,5,9th element from each list
list.2 <- lapply(mylist, function(x) {x[c(3,5,9)]})
Run Code Online (Sandbox Code Playgroud)


Dan*_*anO 5

purrr提供了另一种解决方案来解决tidyverse 中的这些类型的列表操作

library(purrr)
library(dplyr)

desired_values <- c(1,3)

mylist <- list(1:5, letters[1:6], 11:15) %>% 
purrr::map(`[`,desired_values) 

mylist
Run Code Online (Sandbox Code Playgroud)