私はかなり単純なタスクを持っていますが、良い解決策を見つけていません。
> 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などのようなもの。あなたの助けを前もってありがとう
マウリシオ・オルティス
sapply(mylist, "[", y)
を使用できます:
mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
[
の代わりに[[
を使用してみてください(実際にlapply
が欲しい場合は、あなたが何をしたかによって異なります)。
?'[['
から:
[、[[、および$の最も重要な違いは、[は複数の要素を選択でき、他の2つは単一の要素を選択できることです。
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)]})
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
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
あなたが望むものだと思います。