ggplot2找不到对象错误

djh*_*rio 9 r ggplot2

我无法理解这一点.

这些例子正在起作用:

# 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


Ric*_*ton 5

发生错误是因为get查看错误的环境(即,不在results数据框内).您可以明确指定,get(var.name.1, envir = results)但这将是丑陋,糟糕的代码.aes_string正如Iselzer建议的那样,使用起来会好得多.