我无法理解这一点.
这些例子正在起作用:
# Function with geom_density
gr.den <- function(var.name) {
ggplot(results, aes(get(var.name), fill = name)) +
geom_density(alpha = 0.2) +
geom_vline(xintercept = tv[, var.name], color="red", size=1) +
xlab(var.name)
}
gr.den("sum.Empl")
# Example with geom_point
ggplot(results, aes(sum.All, sum.Empl)) +
geom_point(alpha = 1/5) +
opts(aspect.ratio = 1) +
facet_grid(. ~ name)
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用geom_point创建类似的功能:
gr.sc <- function(var.name.1, var.name.2) {
ggplot(results, aes(get(var.name.1), get(var.name.2))) +
geom_point(alpha = 1/5) +
opts(aspect.ratio = 1) +
facet_grid(. ~ name)
}
gr.sc("sum.All", "sum.Empl")
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误.为什么?
Error in get(var.name.1) : object 'var.name.1' not found
Run Code Online (Sandbox Code Playgroud)
Luc*_*zer 18
如果要在函数内部使用aes,最好使用aes_string.
gr.sc <- function(var.name.1, var.name.2) {
ggplot(results, aes_string(x = var.name.1, y = var.name.2)) +
geom_point(alpha = 1/5) +
opts(aspect.ratio = 1) +
facet_grid(. ~ name)
}
gr.sc("sum.All", "sum.Empl")
Run Code Online (Sandbox Code Playgroud)
HTH
发生错误是因为get查看错误的环境(即,不在results数据框内).您可以明确指定,get(var.name.1, envir = results)但这将是丑陋,糟糕的代码.aes_string正如Iselzer建议的那样,使用起来会好得多.