使用 %>% 运算符获取向量中特定元素的索引
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)。有两种情况:
您想将 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
我想要向量 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