帮助理解我在R中定义的函数中的错误

时间:2011-06-27 19:54:03

标签: r

我是R的新手,刚学会编写简单的函数。有人可以帮助我理解为什么以下功能不起作用。

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)

现在,如果我调用fboxplot函数

fboxplot(df, col1, col2)

我收到错误Error in eval(expr, envir, enclos): object varx not found。我也试过

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

这给出了同样的错误。我哪里错了?

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

ggplot2中的aes函数使用library()这样的名称,即它将参数的名称作为参数。如果这是一个对象,它不会对它进行评估,而是采用名称。这里需要varx作为参数,而不是varx评估的内容。

如果您使用aes_string()代替并在fboxplot()调用中使用字符作为参数,则此方法有效:

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

答案 1 :(得分:6)

问题是您正在通过varxvary向量,而aes函数需要变量名称(不过是字符串)。解决此问题的一种方法是使用aes_string函数将变量名称作为字符串传递(但仍然不是向量):

以下内容应该有效:

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

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