首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个功能与magrittr

哪个功能与magrittr
EN

Stack Overflow用户
提问于 2020-05-27 21:25:52
回答 4查看 107关注 0票数 1

我不明白为什么magrittr和哪个函数的组合不能工作!!

代码语言:javascript
复制
> x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
> x %>% which(. == TRUE)
[1] 1 2 3 5
> x %>% which(. == FALSE)
[1] 1 2 3 5

最后一个显然是错的。然而,这样做是可行的:

代码语言:javascript
复制
> x %>% (function(s){which(s==TRUE)})
[1] 1 2 3 5
> x %>% (function(s){which(s==FALSE)})
[1] 4

同样,这也适用于:

代码语言:javascript
复制
> x %>% which
[1] 1 2 3 5
> (!x) %>% which
[1] 4
> 

我想是的。符号不能与等号'==‘一起工作

知道吗?预先赏识

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-28 06:17:13

管道的基本概念:

管道的左手边是右手边函数的第一个参数.

所以当你这么做的时候

代码语言:javascript
复制
c(1, 2, 3) %>% sum
#[1] 6

意思是你在做:

代码语言:javascript
复制
sum(c(1, 2, 3))
#[1] 6

同样,当你这样做时:

代码语言:javascript
复制
x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
x %>% which(. == TRUE)
#[1] 1 2 3 5

这意味着你在做

代码语言:javascript
复制
which(x, x == TRUE)
#[1] 1 2 3 5

代码语言:javascript
复制
x %>% which(. == FALSE)
#[1] 1 2 3 5

是一样的

代码语言:javascript
复制
which(x, x == FALSE)
#[1] 1 2 3 5

因此,在使用管道时,x == TRUEx == FALSE被视为which的第二个参数,即arr.ind

使用{},您可以停止管道的这种行为,这是管道的LHS作为在RHS中起作用的第一个参数。在这种情况下,您将得到预期的输出。

代码语言:javascript
复制
x %>% {which(. == TRUE)}
#[1] 1 2 3 5

x %>% {which(. == FALSE)}
#[1] 4

还请注意,您实际上不需要将逻辑值与==进行比较。

代码语言:javascript
复制
x %>% which

代码语言:javascript
复制
x %>% `!` %>% which

同样的工作方式。

票数 2
EN

Stack Overflow用户

发布于 2020-05-27 22:39:18

我还是不知道为什么

代码语言:javascript
复制
x %>% which(. == FALSE)

不起作用

我认为magrittr函数在某种程度上忽略了其余的论点。

代码语言:javascript
复制
> x %>% which(. <= 3 + 3)
[1] 1 2 3 5
票数 1
EN

Stack Overflow用户

发布于 2020-05-27 21:32:35

我刚刚意识到这个问题的答案,它需要一个逻辑输入,并且只检查它是否是真的,所以我必须首先将x更改为一个逻辑值。

代码语言:javascript
复制
> (x == TRUE) %>% which()
[1] 1 2 3 5
> (x == FALSE) %>% which()
[1] 4

这也起作用。

代码语言:javascript
复制
> x %>% equals(., TRUE) %>% which()
[1] 1 2 3 5
> x %>% equals(., FALSE) %>% which()
[1] 4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62053140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档