问题描述:
存在这么一个场景,当需要动态选择列作为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. 大多数