开发者

Help understand the error in a function I defined in R

I am very new to R and just learnt to write simple functions. Can someone help me understand why the following function does not work.

fboxplot <- function(mydataframe开发者_开发问答, varx, vary)
  {
    p <- ggplot(data=mydataframe, aes(x=varx, y=vary))
    p + geom_boxplot()
  }

col1 = factor(rep(1:3, 3))
col2 = rnorm(9)
col3 = c(rep(10,5), rep(20,4))
df = data.frame(col1 = col1, col2 = col2, col3 = col3)

Now, if I call the fboxplot function

fboxplot(df, col1, col2)

I get the error Error in eval(expr, envir, enclos): object varx not found. I also tried

fboxplot(df, varx = col1, vary = col2)

That gives the same error. Where am I going wrong?

Thanks for your help.


The aes function in ggplot2 uses names like library() does, i.e. it takes the name of the argument as the argument. If this is an object, it does not evaluate it but takes the name instead. Here it takes varx as the argument and not what varx evaluates too.

It works if you use aes_string() instead and use characters as arguments in the fboxplot() call:

fboxplot <- function(mydataframe, varx, vary)
  {
    p <- ggplot(data=mydataframe, aes_string(x=varx, y=vary))
    p + geom_boxplot()
  }

col1 = factor(rep(1:3, 3))
col2 = rnorm(9)
col3 = c(rep(10,5), rep(20,4))
df = data.frame(col1 = col1, col2 = col2, col3 = col3)

fboxplot(df, "col1", "col2")


The problem is that you are passing through varx and vary vectors, while the aes function expects variable names (not as strings, though). One way to fix this is to use the aes_string function to which you can pass variable names as strings (still not vectors, though):

The following should work:

fboxplot2 <- function(mydataframe, varx, vary)   {
     p <- ggplot(data=mydataframe, aes_string(x=varx, y=vary))
     p + geom_boxplot()   }

fboxplot2(df, "col1", "col2") 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜