我不明白为什么magrittr和哪个函数的组合不能工作!!
> 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
> 我想是的。符号不能与等号'==‘一起工作
知道吗?预先赏识
发布于 2020-05-28 06:17:13
管道的基本概念:
管道的左手边是右手边函数的第一个参数.
所以当你这么做的时候
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同样的工作方式。
发布于 2020-05-27 22:39:18
我还是不知道为什么
x %>% which(. == FALSE)不起作用
我认为magrittr函数在某种程度上忽略了其余的论点。
> x %>% which(. <= 3 + 3)
[1] 1 2 3 5发布于 2020-05-27 21:32:35
我刚刚意识到这个问题的答案,它需要一个逻辑输入,并且只检查它是否是真的,所以我必须首先将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] 4https://stackoverflow.com/questions/62053140
复制相似问题