【问题标题】:How to use logical functions with %>% operator (dplyr)如何使用带有 %>% 运算符的逻辑函数 (dplyr)
【发布时间】:2015-08-23 01:39:36
【问题描述】:

我想知道如何在 R 中使用 %>% 运算符和 dplyr 包中的逻辑函数(例如 whichanyall)。我有一个值向量

aaa <- sample(1:5, 10, replace = TRUE)

我想知道其中哪些等于4。当我尝试这个时:

aaa == 4 %>% which(.)

我收到以下错误:

Error in which(.) : argument to 'which' is not logical

其他需要逻辑向量作为参数的函数也是如此,例如allany

aaa == 4 %>% any

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE

Warning message: In any(.) : coercing argument of type 'double' to logical

【问题讨论】:

  • 你的 dplyr 版本是多少?
  • %>% 不是 dplyr 运算符。
  • 是的,但它是由dplyr 导入的...

标签: r dplyr logic


【解决方案1】:

我认为这只是运算符优先级问题。 %>% 运算符的优先级低于== 等其他运算符,因此您实际上对aaa == 4 %>% which 所做的是将4 传递给which 函数...

(aaa == 4) %>% which

似乎工作得很好......

%>% 的这种用法似乎有点奇怪/不必要,但也许这只是因为您已将其与工作流程隔离以创建可重现的示例。或许你可以多说一下上下文?

【讨论】:

  • 你的 dplyr 版本是多少?
【解决方案2】:

在逻辑运算周围使用括号。

aaa <- sample(1:5, 10, replace = TRUE)
(aaa == 4) %>% which(.)
[1]  7  9 10
(aaa == 4) %>% which()
[1]  7  9 10
(aaa == 4) %>% any()
[1] TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多