私は長い名前のリストを使用していて、特定の名前に一致する要素を、次のような整頓されたコンテキスト内で保持/削除しようとしています。
dplyr::select(contains("pattern"))
しかし、私はそれを理解するのに問題があります。
library(tidyverse)
a_list <-
list(a = "asdfg",
b = "qwerty",
c = "zxcvb")
a_list %>% pluck("a") # works
a_list %>% pluck(contains("a")) #does not work
a_list[2:3] # this is what I want
a_list %>% pluck(-"a") # but this does not work
それを完全に整頓しておくと、あなたはできる、
purrr::discard(a_list,.p = ~stringr::str_detect(.x,"a"))
名前で削除するには、次を使用できます。
a_list %>% purrr::list_modify("a" = NULL)
$`b`
[1] "qwerty"
$c
[1] "zxcvb"
他の回答が、要素自体ではなく要素の名前を選択に使用しているかどうかはわかりません。あなたが与えた例は、要素「a」の両方がその値に「a」を含み、「a」と呼ばれるため、少し混乱します。そのため、混乱するのは簡単です。違いを示すために、例を少し変更します。
b_list <-
list(a = "bsdfg",
b = "awerty",
c = "zxcvb")
b_list %>% purrr::list_modify("a" = NULL)
戻り値
$`b`
[1] "awerty"
$c
[1] "zxcvb"
だが
purrr::discard(b_list,.p = ~stringr::str_detect(.x,"a"))
戻り値
$`a`
[1] "bsdfg"
$c
[1] "zxcvb"
ベースRを使用:
a_list[!grepl("a",unlist(a_list))]
$b
[1] "qwerty"
$c
[1] "zxcvb"
前の回答と同様ですが、OPのように名前を検索します
within(a_list, rm(a))
# or
a_list[!grepl("a",names(a_list))]
# or
a_list[which(names(a_list)=="a")]<-NULL
# or
a_list[-which(names(a_list)=="a")]