R dplyr如何决定比较和“或”运算符之间的优先级?

时间:2018-01-04 18:15:38

标签: r dplyr

本书 R for Data Science gives this example

    package main

    import (
        "fmt"
        "os/exec"
    )

    var cmds = map[string][]string{
        "go":   []string{"/usr/local/go/bin/go", "version"},
        "java": []string{"java", "-version"},
    }

    type GetHand struct {
        Name    string
        Version string
    }

    func handleKey(key string) (*GetHand, error) {

        cmd := cmds[key]
        if cmd == nil {
            return nil, fmt.Errorf("No such key : %v", key)
        }

        b, err := exec.Command("/usr/local/go/bin/go", "version").Output()
        if err != nil {
            return nil, err
        }
        return &GetHand{
            Name:    key,
            Version: string(b),
        }, nil
    }

    func main() {
        h, err := handleKey("go")
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println(h)

        h, err = handleKey("java")
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println(h)
    }

结果是library(nycflights13) library(tidyverse) filter(flights, month == 11 | 12) 过滤了月份== 1的所有航班,因为“它找到所有等于11 | 12的月份,一个评估为TRUE的表达式”

为什么先做“11 | 12”,然后进行比较?不应该首先做“月== 11”,然后“或”用12,返回一个全部为TRUE的向量,因此返回所有内容?

下面显示R优先于dplyr而不是==

|

1 个答案:

答案 0 :(得分:3)

  

结果是dplyr过滤了月份== 1

的所有航班

这不是真的,过滤器什么都不做,并返回原始数据框。

filter(flights, month == 11 | 12) %>% dim()
# [1] 336776     19
dim(flights)
# [1] 336776     19
  

为什么会这样做" 11 | 12"首先,然后进行比较?

不正确,它首先比较month == 11给出一个逻辑向量,当| 12评估为TRUE时变为全为TRUE。

  

R优先于== over |

这是正确的陈述。

您可以参考R here中的运算符优先级, 从最高到最低

12
相关问题