38

私はかなり単純な仕事をしていますが、良い解決策が見つかりません。

> 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)    

リスト内の各コンポーネントのサブ要素 3、5、および 9 をmylistから抽出したいと思います。私は試してみsapply[mylist,"[[",y]ましたが、運が悪いです!、その他には vapply、lapply などがあります。

マウリシオ・オルティス

4

7 に答える 7

38

あなたが使用することができますsapply(mylist, "[", y)

mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
于 2012-03-08T20:21:49.483 に答える
27

[代わりに使用してみてください[[(そして、ライトが実際に欲しい後の状態に応じてlapply)。

差出人?'[['

[、[[、および$の最も重要な違いは、[は複数の要素を選択できるのに対し、他の2つは単一の要素を選択できることです。

于 2012-03-08T20:20:20.140 に答える
11

使用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)]})
于 2015-11-23T11:47:50.707 に答える
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
于 2016-12-14T02:43:53.350 に答える
0

これを行うためのより良い方法がありますが、ここに簡単な解決策があります。

# your values
list1<-1:10
list2<-letters[1:26]
list3<-25:32

# put 'em together in a list
mylist<-list(list1,list2,list3)

# function
foo<-function(x){x[c(3,5,9)]}

# apply function to each of the element in the list
foo(mylist[[1]])
foo(mylist[[2]])
foo(mylist[[3]])

# check the output

> foo(mylist[[1]])
[1] 3 5 9
> foo(mylist[[2]])
[1] "c" "e" "i"
> foo(mylist[[3]])
[1] 27 29 NA
于 2012-03-08T20:24:50.233 に答える