zoukankan      html  css  js  c++  java
  • [R]dplyr及ggplot2中的变量引用列的问题

    问题描述:

    存在这么一个场景,当需要动态选择列作为dplyr或ggplot2的输入时,列名的指定会出现问题。

    以iris举例:

    # 以iris dataset为例
    colnames <- c("Sepal.Length", "Sepal.Width", "Petal.Length","Petal.Width","Species")
    
    for (col in colnames) {
        ggplot(data = iris, aes(x = Sepal.Length, y = col)) + geom_point()  
    }

    上面的代码会报错。在ggplot2和dplyr中,我们指定列是`y = Sepal.Length`, 而通过变量指定列时,是` y = 'Sepal.Length'`, 注意这个引号。这个引号导致了dplyr和ggplot2包匹配列的失效。

    相关的问题,Hadley(dplyr和ggplot2包作者)在这里有描述:https://dplyr.tidyverse.org/articles/programming.html 

    ========================================原文看不太懂,大概翻译一下========================================

    大多数dplyr函数都使用非标准计算(non-standard evaluation, NSE),即这些函数都不遵循常规的R语言计算规范。这些函数获取用户输入的表达式, 并以自己的方式做计算。采用这种方案给dplyr代码带来2个主要的好处:

    1. 使dplyr的data frame操作能够简洁的表达,因为不需要重复输入data frame的名字。比如,在dplyr中的代码可以这样表示: filter(df, x == 1, y == 2, z == 3),而不需要以传统的方式df[df$x == 1 & df$y == 2 & df$z == 3, ]

    2. dplyr可以使用不同于原生R的计算方式。这点对数据库后端很重要,因为dplyr实际上并不做任何工作,它只是生成SQL语言,告诉数据库该做什么。由数据库来计算结果。

    不过,这种方案同时也带来两个主要的缺陷:

    1. 大多数

  • 相关阅读:
    Arrays类和Timer类(定时调度)
    Centos6.3下Ganglia3.6.0安装配置
    【编程之美挑战赛第一场】树
    ORACLE物化视图具体解释
    让算法会说话之冒泡排序
    VS2008帮助"更新正在进行中"解决办法
    #问题
    sql server 2008 评估期已过期解决办法
    eclipse定义枚举类型错误
    C# 生产者和消费者问题使用Monitor同步
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9298890.html
Copyright © 2011-2022 走看看