2011-04-01 71 views
8

我无法得到我的头。对象未找到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) 

然后我试图使用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") 

而且我得到这个错误。为什么?

Error in get(var.name.1) : object 'var.name.1' not found 
+1

请提供一个可重复的示例。看起来我们需要'results'和'tv'的内容来运行你的代码。运行'dput()'并将结果粘贴到你的问题中。 – Chase 2011-04-01 14:02:05

回答

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") 

HTH

+0

非常感谢! 'aes_string'帮助很大。我在第一个函数gr.den中发现了一个错误,并通过'aes_string'解决了它。 – djhurio 2011-04-01 14:42:39

4

因为get被找错环境中发生错误(即,不是results数据帧的内部)。你可以明确指定get(var.name.1, envir = results),但那会是很丑陋的代码。正如Iselzer所建议的那样,使用aes_string更好。

1

我碰到类似这样的问题:https://groups.google.com/forum/#!topic/ggplot2/_kKP4NNu3bc 其中aes_string不起作用。

这可能会在更高版本的ggplot2中解决。但出于兼容性原因,我使用的是旧版本的ggplot2。对我而言,快速破解是将函数参数设置为全局变量,即

gr.sc <- function(var.name.1, var.name.2) { 
    var.name.1 <<- var.name.1 
    ... 
    ggplot(... 
    ... 
} 
相关问题