R中的aes和aes_string(ggplot2)有什么区别
What is the difference between aes and aes_string (ggplot2) in R
由于缺乏信息学背景,我很难理解 ggplot2 中 aes
和 aes_string
之间的区别及其对日常使用的影响。
从描述 (?aes_string
) 我能够理解两者 describe how variables in the data are mapped to visual properties (aesthetics) of geom
。
此外据说 aes uses non-standard evaluation to capture the variable names.
而 aes_string
使用 regular evaluation
.
从示例代码可以明显看出两者产生相同的输出 (a list of unevaluated expressions
):
> aes_string(x = "mpg", y = "wt")
List of 2
$ x: symbol mpg
$ y: symbol wt
> aes(x = mpg, y = wt)
List of 2
$ x: symbol mpg
$ y: symbol wt
Non-standard evaluation
被 Hadley Wickham in his book Advanced R 描述为一种方法,不仅可以调用函数参数的值,还可以调用生成它们的代码。
我假设 regular evaluation
相反只调用函数的值,但我没有找到证实这个假设的来源。此外,我不清楚这两者有何不同,以及为什么在我使用该软件包时这与我相关。
在 inside-R website 上提到 aes_string is particularly useful when writing functions that create plots because you can use strings to define the aesthetic mappings, rather than having to mess around with expressions.
但从这个意义上说,我不清楚为什么我应该使用 aes
而不是在使用 ggplot2
时总是选择 aes_string
...从这个意义上说它会有所帮助我找到了对这些概念的一些澄清和日常使用的实用提示。
aes
为您节省了一些输入,因为您不需要引号。就这些。您当然可以随时使用 aes_string
。如果你想以编程方式传递变量名,你应该使用 aes_string
。
内部 aes
使用 match.call
进行非标准评估。这里有一个简单的例子来说明:
fun <- function(x, y) as.list(match.call())
str(fun(a, b))
#List of 3
# $ : symbol fun
# $ x: symbol a
# $ y: symbol b
比较:
library(ggplot2)
str(aes(x = a, y = b))
#List of 2
# $ x: symbol a
# $ y: symbol b
符号将在稍后评估。
aes_string
使用 parse
实现同样的效果:
str(aes_string(x = "a", y = "b"))
#List of 2
# $ x: symbol a
# $ y: symbol b
由于缺乏信息学背景,我很难理解 ggplot2 中 aes
和 aes_string
之间的区别及其对日常使用的影响。
从描述 (?aes_string
) 我能够理解两者 describe how variables in the data are mapped to visual properties (aesthetics) of geom
。
此外据说 aes uses non-standard evaluation to capture the variable names.
而 aes_string
使用 regular evaluation
.
从示例代码可以明显看出两者产生相同的输出 (a list of unevaluated expressions
):
> aes_string(x = "mpg", y = "wt")
List of 2
$ x: symbol mpg
$ y: symbol wt
> aes(x = mpg, y = wt)
List of 2
$ x: symbol mpg
$ y: symbol wt
Non-standard evaluation
被 Hadley Wickham in his book Advanced R 描述为一种方法,不仅可以调用函数参数的值,还可以调用生成它们的代码。
我假设 regular evaluation
相反只调用函数的值,但我没有找到证实这个假设的来源。此外,我不清楚这两者有何不同,以及为什么在我使用该软件包时这与我相关。
在 inside-R website 上提到 aes_string is particularly useful when writing functions that create plots because you can use strings to define the aesthetic mappings, rather than having to mess around with expressions.
但从这个意义上说,我不清楚为什么我应该使用 aes
而不是在使用 ggplot2
时总是选择 aes_string
...从这个意义上说它会有所帮助我找到了对这些概念的一些澄清和日常使用的实用提示。
aes
为您节省了一些输入,因为您不需要引号。就这些。您当然可以随时使用 aes_string
。如果你想以编程方式传递变量名,你应该使用 aes_string
。
内部 aes
使用 match.call
进行非标准评估。这里有一个简单的例子来说明:
fun <- function(x, y) as.list(match.call())
str(fun(a, b))
#List of 3
# $ : symbol fun
# $ x: symbol a
# $ y: symbol b
比较:
library(ggplot2)
str(aes(x = a, y = b))
#List of 2
# $ x: symbol a
# $ y: symbol b
符号将在稍后评估。
aes_string
使用 parse
实现同样的效果:
str(aes_string(x = "a", y = "b"))
#List of 2
# $ x: symbol a
# $ y: symbol b