我想要向量 x 中元素的索引
x <- c("apple", "banana", "peach", "cherry")
使用基数R,我会这样做
which(x == "peach")
但是由于我的 x 位于管道的末端,我想以 magrittr 的方式获取索引。
x %>% getIndex("peach")
我想要的输出是 3。
您可以使用点 (.
( 引用管道的左侧 (lhs(。有两种情况:
-
您希望将 lhs 用作不在第一个位置的参数。一个常见的例子是使用
data
参数:mtcars %>% lm(mpg~cyl, data = .)
在这种情况下,margrittr
不会将 lhs 注入到第一个参数中,而只会在标有.
的参数中注入。
- 您希望将 lhs 作为表达式的一部分而不是单个函数参数包含在内。这是你的情况!在这种情况下
magrittr
仍将注入 lhs 作为第一个参数。您可以使用大括号 ({
( 取消它。
因此,您需要使用带有{
大括号的.
表示法:
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