用提取物对向量进行子集化

Subsetting vectors with extract

假设我有矢量,我想删除一个特定的元素。我可以执行以下操作

library(magrittr)

foo <- LETTERS[1:10]

foo %>% 
{
   bar <- .

   bar %>% 
     extract(bar %>% 
              equals("A") %>% 
              not)
}


[1] "B" "C" "D" "E" "F" "G" "H" "I" "J"

但是如果我想更简洁一点,这个:

foo %>% 
  extract(. %>% 
            equals("A") %>% 
            not)

无效:

Error in extract(., . %>% equals("A") %>% not) : 
  invalid subscript type 'closure'

难道没有更惯用的 magrittr 方法来做到这一点吗?

一个选项是将 foo 通过管道传递到子集函数 [ 中,使用 !=:

限制不等于 A 的元素
foo %>% "["(. != "A")
# [1] "B" "C" "D" "E" "F" "G" "H" "I" "J"

magrittr 包已将 [ 别名为 extract,因此这等同于:

foo %>% extract(. != "A")
# [1] "B" "C" "D" "E" "F" "G" "H" "I" "J"