Object not found error with ggplot2
Solution 1
If you are going to use aes inside a function it's better to use aes_string instead.
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
Solution 2
The error occurs because get
is looking in the wrong environment (i.e., not inside the results
data frame). You could explicitly specify the get(var.name.1, envir = results)
but that would be ugly, awful code. Much better to use aes_string
as Iselzer suggests.
Solution 3
I ran into problems similar to this: https://groups.google.com/forum/#!topic/ggplot2/_kKP4NNu3bc where aes_string does not work.
This might be resolved in later versions of ggplot2. But I'm using an older version of ggplot2 for compatibility reasons. A quick hack that worked for me was to set function parameters as global variables, i.e.
gr.sc <- function(var.name.1, var.name.2) {
var.name.1 <<- var.name.1
...
ggplot(...
...
}
Related videos on Youtube
Comments
-
djhurio almost 4 years
I can not get my head around this.
These examples are working:
# 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)
Then I am trying to create similar function using 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")
And I am getting this error. Why?
Error in get(var.name.1) : object 'var.name.1' not found
-
Chaseplease provide a reproducible example. It looks like we need the contents of
results
andtv
to run your code. Rundput()
and paste the results into your questions.
-
-
djhurio over 12 yearsThanks a lot!
aes_string
helps a lot. I found an error also in the first functiongr.den
and solved it byaes_string
.