按名称

时间:2018-01-26 19:00:38

标签: r tidyverse

我正在处理一个很长的命名列表,并且我试图在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

4 个答案:

答案 0 :(得分:4)

保持完整整齐,你可以做到,

purrr::discard(a_list,.p = ~stringr::str_detect(.x,"a"))

答案 1 :(得分:2)

使用基数R:

a_list[!grepl("a",unlist(a_list))]
$b
[1] "qwerty"

$c
[1] "zxcvb"

答案 2 :(得分:1)

要按名称删除,可以使用:

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"

答案 3 :(得分:1)

类似于先前的答案,但按照OP中的名称进行搜索

public HttpResponseMessage InsertRota([FromBody] Models.HelpdeskStaffRota paraStaffRota)
{
 // code
}