功能与ggplot和aes_

时间:2015-07-30 19:19:37

标签: r ggplot2

我刚看过hadley的文章:http://rpubs.com/hadley/97970真的很酷!

因为我想准备一些简单的功能。当我想创建一个图并使用另一个变量来区分所有对象时,我们通常使用colorfill参数。我总是有一个问题需要记住,我应该在散点图中使用color参数,而在例如fill中使用point <- function(data, x, y, color = NULL){ if (is.null(color)){ ggplot(data, aes_(x = substitute(x),y = substitute(y)))+ geom_point(color = 'red') } else{ ggplot(data, aes_(x = substitute(x),y = substitute(y),color = substitute(color)))+ geom_point() } } 箱形图。 因此,当我不使用颜色参数时,我想使用红色默认值:

point(mtcars, qsec, mpg)

在这种情况下,color正常工作,但point(mtcars, qsec, mpg, factor(cyl))参数功能根本不起作用 - textField:shouldChangeCharactersInRange:replacementString:。为什么呢?

1 个答案:

答案 0 :(得分:2)

您似乎对非标准评估存在问题。当您在is.null()上运行color时,您正在评估传递给该函数的承诺。然后,这会更改在变量上调用substitute()的行为。您尝试使用substitute()获得的行为依赖于传递未评估的承诺。例如

foo<-function(x=NULL) {
   if(is.null(x)) {
       "NOTPASSED"
   } else {
       substitute(x)
   }
}

foo()
#[1] "NOTPASSED"
foo(ok)
# Error in foo(ok) : object 'ok' not found

is.null发送R寻找找不到的名为ok的变量。您希望能够仅提取变量的名称而不是值。

在这种情况下,您实际上只是检查缺少的参数。最好使用missing()。与

比较
foo<-function(x) {
   if(missing(x)) {
       "NOTPASSED"
   } else {
       substitute(x)
   }
}

foo()
# [1] "NOTPASSED"
foo(ok)
# ok

missing()函数不会尝试评估承诺。您可以根据自己的功能进行调整。它并非特定于ggplot