哪个功能与 magrittr
which function with magrittr
我不明白为什么 magrittr 和 which 函数的组合不起作用!!
> x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
> x %>% which(. == TRUE)
[1] 1 2 3 5
> x %>% which(. == FALSE)
[1] 1 2 3 5
最后一个显然是错误的。
然而这有效:
> x %>% (function(s){which(s==TRUE)})
[1] 1 2 3 5
> x %>% (function(s){which(s==FALSE)})
[1] 4
这也有效:
> x %>% which
[1] 1 2 3 5
> (!x) %>% which
[1] 4
>
我猜是'.'符号不适用于等效符号“==”
有什么想法吗?
提前赞赏
我刚刚意识到这个问题的答案,它需要一个逻辑输入并且只检查它是否为真
所以我必须先将 x 更改为逻辑值
> (x == TRUE) %>% which()
[1] 1 2 3 5
> (x == FALSE) %>% which()
[1] 4
这也有效
> x %>% equals(., TRUE) %>% which()
[1] 1 2 3 5
> x %>% equals(., FALSE) %>% which()
[1] 4
我对最丑管道的尝试:
x %>% `==`(FALSE) %>% which()
我还是不知道为什么
x %>% which(. == FALSE)
不起作用
我认为 magrittr 函数以某种方式忽略了参数的所有其余部分
> x %>% which(. <= 3 + 3)
[1] 1 2 3 5
管道的基本概念:
管道的左侧是右侧函数的第一个参数。
所以当你这样做时:
c(1, 2, 3) %>% sum
#[1] 6
这意味着你正在做:
sum(c(1, 2, 3))
#[1] 6
同样,当您这样做时:
x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
x %>% which(. == TRUE)
#[1] 1 2 3 5
说明你在做
which(x, x == TRUE)
#[1] 1 2 3 5
和
x %>% which(. == FALSE)
#[1] 1 2 3 5
与
相同
which(x, x == FALSE)
#[1] 1 2 3 5
因此,当使用管道时,x == TRUE
和 x == FALSE
被视为 which
的第二个参数,即 arr.ind
。
您可以通过使用 {}
停止管道的这种行为,即管道的 LHS 作为 RHS 中函数的第一个参数。在这种情况下,您将获得预期的输出。
x %>% {which(. == TRUE)}
#[1] 1 2 3 5
x %>% {which(. == FALSE)}
#[1] 4
另请注意,您实际上并不需要将逻辑值与 ==
进行比较。
x %>% which
和
x %>% `!` %>% which
以同样的方式工作。
我不明白为什么 magrittr 和 which 函数的组合不起作用!!
> x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
> x %>% which(. == TRUE)
[1] 1 2 3 5
> x %>% which(. == FALSE)
[1] 1 2 3 5
最后一个显然是错误的。 然而这有效:
> x %>% (function(s){which(s==TRUE)})
[1] 1 2 3 5
> x %>% (function(s){which(s==FALSE)})
[1] 4
这也有效:
> x %>% which
[1] 1 2 3 5
> (!x) %>% which
[1] 4
>
我猜是'.'符号不适用于等效符号“==”
有什么想法吗? 提前赞赏
我刚刚意识到这个问题的答案,它需要一个逻辑输入并且只检查它是否为真 所以我必须先将 x 更改为逻辑值
> (x == TRUE) %>% which()
[1] 1 2 3 5
> (x == FALSE) %>% which()
[1] 4
这也有效
> x %>% equals(., TRUE) %>% which()
[1] 1 2 3 5
> x %>% equals(., FALSE) %>% which()
[1] 4
我对最丑管道的尝试:
x %>% `==`(FALSE) %>% which()
我还是不知道为什么
x %>% which(. == FALSE)
不起作用
我认为 magrittr 函数以某种方式忽略了参数的所有其余部分
> x %>% which(. <= 3 + 3)
[1] 1 2 3 5
管道的基本概念:
管道的左侧是右侧函数的第一个参数。
所以当你这样做时:
c(1, 2, 3) %>% sum
#[1] 6
这意味着你正在做:
sum(c(1, 2, 3))
#[1] 6
同样,当您这样做时:
x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
x %>% which(. == TRUE)
#[1] 1 2 3 5
说明你在做
which(x, x == TRUE)
#[1] 1 2 3 5
和
x %>% which(. == FALSE)
#[1] 1 2 3 5
与
相同which(x, x == FALSE)
#[1] 1 2 3 5
因此,当使用管道时,x == TRUE
和 x == FALSE
被视为 which
的第二个参数,即 arr.ind
。
您可以通过使用 {}
停止管道的这种行为,即管道的 LHS 作为 RHS 中函数的第一个参数。在这种情况下,您将获得预期的输出。
x %>% {which(. == TRUE)}
#[1] 1 2 3 5
x %>% {which(. == FALSE)}
#[1] 4
另请注意,您实际上并不需要将逻辑值与 ==
进行比较。
x %>% which
和
x %>% `!` %>% which
以同样的方式工作。