我正在处理一个很长的命名列表,我正在尝试在 tidyverse 上下文中保留/删除与某个名称匹配的元素,类似于
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
最佳答案
要按名称删除,您可以使用:
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"
关于按名称删除列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467884/