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

Cur*_*arn 5 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)
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用fboxplot函数

fboxplot(df, col1, col2)
Run Code Online (Sandbox Code Playgroud)

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

fboxplot(df, varx = col1, vary = col2)
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

Sac*_*amp 7

aesggplot2中的函数使用类似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")
Run Code Online (Sandbox Code Playgroud)


Ani*_*iko 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") 
Run Code Online (Sandbox Code Playgroud)