我需要向量x中元素的索引
x <- c("apple", "banana", "peach", "cherry")
以R为底的i会这样做
which(x == "peach")
但是由于我的x在管道的末端,我想用magrittr的方法得到索引。
x %>% getIndex("peach")
我想要的输出是3。
qcuzuvrc1#
您可以使用点(.)来引用管道的左侧(lhs)。有两种情况可供参考:1.您希望使用lhs作为不在第一个位置的参数。常见的示例是使用data参数:
.
data
mtcars %>% lm(mpg~cyl, data = .)
在这种情况下,margrittr不会将lhs注入到第一个参数中,而只会注入到标记为.的参数中。1.你不想把lhs作为一个函数参数,而是作为表达式的一部分,这就是你的情况!在这种情况下,magrittr仍然会把lhs作为第一个参数注入,你可以用花括号({)取消它。因此,您需要使用.符号和{大括号:
margrittr
magrittr
{
x %>% { which(. == "peach") } [1] 3
排除{将导致尝试运行which(x, x == "peach")的等效项,这将产生错误。
which(x, x == "peach")
zyfwsgd62#
或者简单地说:
x %>% match(x = "peach") # [1] 3
(与which()的不同之处在于它只提供第一个匹配项):
which()
y <- c("apple", "banana", "peach", "cherry", "peach") y %>% `==`("peach") %>% which() # [1] 3 5 y %>% match(x = "peach") # [1] 3
2条答案
按热度按时间qcuzuvrc1#
您可以使用点(
.
)来引用管道的左侧(lhs)。有两种情况可供参考:1.您希望使用lhs作为不在第一个位置的参数。常见的示例是使用
data
参数:在这种情况下,
margrittr
不会将lhs注入到第一个参数中,而只会注入到标记为.
的参数中。1.你不想把lhs作为一个函数参数,而是作为表达式的一部分,这就是你的情况!在这种情况下,
magrittr
仍然会把lhs作为第一个参数注入,你可以用花括号({
)取消它。因此,您需要使用
.
符号和{
大括号:排除
{
将导致尝试运行which(x, x == "peach")
的等效项,这将产生错误。zyfwsgd62#
或者简单地说:
(与
which()
的不同之处在于它只提供第一个匹配项):