使用 %>% 运算符获取向量中特定元素的索引

Get index of a specific element in vector using %>% operator

我想要向量 x 中元素的索引

x <- c("apple", "banana", "peach", "cherry")

有了基础 R 我会这样做

which(x == "peach")

但是由于我的 x 在管道的末端,我想以 magrittr 的方式获取索引。

x %>% getIndex("peach")

我想要的输出是 3。

您可以使用点 (.) 引用管道的左侧 (lhs)。有两种情况:

  1. 您想将 lhs 用作不在第一个位置的参数。一个常见的例子是使用 data 参数:

    mtcars %>% lm(mpg~cyl, data = .)
    

    在这种情况下,margrittr 不会将 lhs 注入第一个参数,而只会注入标有 . 的参数。

  2. 您不想将 lhs 作为单个函数参数包含在内,而是作为表达式的一部分。这是你的情况!在这种情况下 magrittr 仍然会将 lhs 作为第一个参数注入。您可以使用大括号 ({).

  3. 取消它

所以你需要使用带{大括号的.符号:

x %>% { which(. == "peach") }

[1] 3

排除 { 会导致尝试 运行 相当于 which(x, x == "peach"),这会产生错误。

或者简单地说:

x %>% match(x = "peach")

# [1] 3

(与 which() 的不同之处在于它只为您提供 第一个 匹配项):

y <- c("apple", "banana", "peach", "cherry", "peach")
y %>% `==`("peach") %>% which()
# [1] 3 5
y %>% match(x = "peach")
# [1] 3