Подтвердить что ты не робот

Как объединить несколько элементов ggplot2 в функцию возврата?

Если я попытаюсь вручную скомпоновать некоторые элементы графика ggplot2, он работает просто отлично:

> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)

Но если я попытаюсь связать часть композиции с функцией, я получаю сообщение об ошибке:

> myFunction <- function() {
+   return(
+     geom_vline(xintercept = 20) + geom_point(data = mtcars)
+   )
+ }
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + myFunction()
Error in geom_vline(xintercept = 20) + geom_point(data = mtcars) : 
  non-numeric argument to binary operator

Я пропустил что-то в обозначении ggplot2 для правильного объединения элементов ggplot2 внутри тела функции?

4b9b3361

Ответ 1

ggplot2 поддерживает "список" элементов:

myFunction <- function()
 list(geom_vline(xintercept = 20),
      geom_point(data = mtcars))

p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
p + myFunction()

вы можете сохранить в списке любую часть, возвращаемую функцией ggplot2, включая labs(), opts() и т.д., а затем использовать "+" для базового слоя bind ggplot2 и фрагмента в списке.

Вероятно, эта функция широко не известна, но очень полезна, когда кто-то хочет повторно использовать кусок элементов.