Как я могу переопределить функцию ggplot в R?

85
7

Я использую команду theme_bw в почти всех моих R-графиках, поэтому я думал об переопределении функции ggplot следующим образом:


# Override the ggplot function to use theme_bw by default
ggplot <- function(...) {
ggplot(...) + theme_bw()
}

Однако, когда я это делаю, интерпретатор жалуется, говоря


Error: evaluation nested too deeply: infinite recursion / options(expressions=)?

Можно ли указать, что ggplot внутри функции должен быть исходной версией ggplot, а не той, которую я только что написал?

спросил(а) 2015-07-17T03:22:00+03:00 4 года, 11 месяцев назад
1
Решение
126

Используйте оператор ::, чтобы указать, что вы хотите вызвать версию функции, которая находится в пакете ggplot2, а не только что созданная вами версия в глобальной рабочей области. то есть что-то вроде


ggplot <- function(...) {
ggplot2::ggplot(...) + theme_bw()
}

должен работать (хотя я его не тестировал!)

У меня также есть сильное предпочтение theme_bw(). Как я это делаю, это использовать theme_set() сразу после загрузки пакета, например.


library("ggplot2"); theme_set(theme_bw())

который, возможно, так же прост и более идиоматичен/прозрачен, как ваше решение.

ответил(а) 2015-07-17T03:26:00+03:00 4 года, 11 месяцев назад
39

Альтернативным решением является изменение кода запуска в документе Rprofile.site. (Для Windows: он в C:\Program Files\R\R-n.n.n\etc).


Добавьте сюда этот код:

.First <- function(){
ggplot2::theme_set(theme_bw())
}

Все, что в .First будет запущено при запуске.

ответил(а) 2017-01-19T17:43:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема