web-dev-qa-db-ja.com

Rのリストからサブセット化する方法

私はかなり単純なタスクを持っていますが、良い解決策を見つけていません。

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

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

マウリシオ・オルティス

29
user1257894

sapply(mylist, "[", y)を使用できます:

mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
30
sgibb

[の代わりに[[を使用してみてください(実際にlapplyが欲しい場合は、あなたが何をしたかによって異なります)。

?'[['から:

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

22
joran

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)]})
7
USER_1

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
3
DanO

Sgibbの答えはあなたが望むものを与えるとは思わない。新しい関数を作成することをお勧めします。

subsetList <- function(myList, elementNames) {
    lapply(elementNames, FUN=function(x) myList[[x]])
}

その後、次のように使用できます。

x <- list(a=3, b="hello", c=4.5, d="world")
subsetList(x, c("d", "a"))
subsetList(x, c(4, 1))

これらは両方とも与える

[[1]]
[1] "world"

[[2]]
[1] 3

あなたが望むものだと思います。

0
toby544