Как объединить несколько элементов 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
внутри тела функции?
Ответы
Ответ 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 и фрагмента в списке.
Вероятно, эта функция широко не известна, но очень полезна, когда кто-то хочет повторно использовать кусок элементов.