[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. 大多数

posted @ 2018-07-12 12:17  oDoraemon  阅读(909)  评论(0编辑  收藏  举报