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

帮助理解我在R中定义的函数中的错误,r,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,

我对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)
我在eval(expr、envir、enclose)中得到错误
未找到对象varx
。我也试过了

fboxplot(df, varx = col1, vary = col2)
这就产生了同样的错误。我哪里做错了


谢谢您的帮助。

问题在于您正在传递
varx
vary
向量,而
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") 

fboxplot2ggplot2中的
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")

fboxplot@Sacha,也许管理员必须安装照片处理摄像头?:)
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")