首页 文章

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

提问于
浏览
5

我是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 回答

  • 6

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

    问题是你正在传递 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")
    

相关问题