我是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)
这给出了同样的错误。我哪里错了?
感谢您的帮助。
答案 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)
问题是您正在通过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")