用提取物对向量进行子集化
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"
假设我有矢量,我想删除一个特定的元素。我可以执行以下操作
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
通过管道传递到子集函数 [
中,使用 !=
:
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"