【发布时间】:2020-02-13 20:44:49
【问题描述】:
举个例子,假设我有这个sn-p的代码:
binwidth <- 0.01
my.histogram <- ggplot(my.data, aes(x = foo, fill = type)) +
geom_histogram(binwidth = binwidth,
aes(y = ..density..),
position = "identity",
alpha = 0.5) +
lims(x = c(0 - binwidth, 1 + binwidth), y = c(0, 100)) +
labs(x = "foo", y = "density")
此外,假设my.data 除了foo 之外还有许多其他列,可以使用几乎相同的代码进行绘制。因此,我想定义一个辅助函数make.histogram,这样我就可以将上面的赋值替换为:
my.histogram <- make.histogram(foo, bindwidth = 0.01)
实际上,这对我来说有点奇怪。 R会抱怨foo没有定义吗?也许电话应该是这样的:
my.histogram <- make.histogram("foo", binwidth = 0.01)
尽管如此,如何定义make.histogram?
就本问题而言,make.histogram 可以将my.data 视为全局变量。
另外,请注意在上面的 sn-p 中,foo 出现了两次,一次(作为变量)在第一个 aes 调用中作为 x 参数,一次(作为字符串)作为 @ labs 调用中的 987654335@ 参数。换句话说,make.histogram 函数需要以某种方式将其第一个参数中指定的列转换为变量名和字符串。
【问题讨论】:
-
您可以使用 R 的非标准评估功能来做到这一点。 Hadley Wickham 的 Advanced R 书中很好地描述了它们的工作原理:adv-r.had.co.nz/Computing-on-the-language.html
-
@andrew.punnett:感谢您的指点!我根据从中学到的知识发布了答案。
-
希望我没有带你走上黑暗的道路!
-
@andrew.punnett:哦,天黑了,好吧! :)