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

Roc*_*cer 5 r dplyr magrittr

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

x <- c("apple", "banana", "peach", "cherry")
Run Code Online (Sandbox Code Playgroud)

有了基础 R 我会这样做

which(x == "peach")
Run Code Online (Sandbox Code Playgroud)

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

x %>% getIndex("peach")
Run Code Online (Sandbox Code Playgroud)

我想要的输出是3。

Axe*_*man 5

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

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

     mtcars %>% lm(mpg~cyl, data = .)
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 您不希望将 lhs 包含为单个函数参数,而是作为表达式的一部分。这就是你的情况!在这种情况下magrittr,仍将注入 lhs 作为第一个参数。您可以使用花括号 ( {) 取消该操作。

所以你需要使用.带大括号的表示法{

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

[1] 3
Run Code Online (Sandbox Code Playgroud)

排除{会导致尝试运行等效的which(x, x == "peach"),从而产生错误。