Краткое описание проблемы: Когда я пытаюсь добавить сводную статистику на график ggpubr с помощью параметра «добавить», ggpubr не может найти функции сводной статистики (пример кода ниже). Например, если я пытаюсь добавить полосы ошибок с помощью add = "mean_se"
, я получаю сообщение об ошибке, а полос ошибок нет.
Решение Неудовлетворительный: Прикрепление ggpubr по телефону library(ggpubr)
бы устраняет эту проблему. См. этот ответ.
Почему приведенное выше решение неудовлетворительно: Я разрабатываю пакет, и поэтому хотел бы избежать присоединения других пакетов через вызовы library() - насколько я понимаю, это лучшая практика, позволяющая избежать загрязнения пространства имен вещами, которые пользователь, возможно, не ожидал, будут загружены.
МОЙ ВОПРОС: Есть ли способ заставить ggpubr найти mean_se
без прикрепления пакета?
Пример кода (в файле .R в моем пакете):
make.plot = function(){
utils::data("iris")
ggpubr::ggbarplot(
data = iris,
x = "Species",
y = "Sepal.Length",
add = "mean_se")
}
Пример вывода:
> devtools::load_all(".")
# i Loading MyPackage
> make.plot()
# Warning message:
# Computation failed in `stat_summary()`:
# object 'mean_se_' of mode 'function' was not found
Одна вещь, с которой должен работает, но не работает, — это передача «ggpubr::mean_se_» в качестве аргумента add
. Это позволяет избежать сообщения об ошибке, но создает неправильный график. Сюжет должен выглядеть так:
Но передача "ggpubr::mean_se_" вместо этого производит:
Дополнительные странности: Если я Когда-либо добавлю вызов для загрузки ggpubr, соберу MyPackage с помощью devtools::load_all(".")
и запущу его, то приведенный выше код никогда не будет работать до тех пор, пока я не выйду и не перезагружу RStudio, даже если я удалю вызов library(ggpubr)
из своего пакета и соберу его снова.
Если вы посмотрите на то, как параметр add
обрабатывается внутри ggpubr
, он фактически сопоставляется как строка с одной из функций суммирования. Кажется, что сводные функции должны быть на пути поиска, когда вызывается ggbarplot
.
Самый простой способ обойти это — скопировать функцию в ваше собственное пространство имен пакетов:
mean_se_ <- ggpubr::mean_se_
make.plot = function(){
utils::data("iris")
ggpubr::ggbarplot(
data = iris,
x = "Species",
y = "Sepal.Length",
add = "mean_se_")
}
make.plot()
Created on 2022-05-04 by the reprex package (v2.0.1)
@Azura'sStarfish Я вижу. Проверьте мое обновление.
Поскольку вы создаете пакет, вы можете убедиться, что mean_se_
находится в пути поиска, импортировав его в свою функцию.
Если вы используете roxygen, вы можете добавить тег @importFrom ggpubr mean_se_
:
#' @importFrom ggpubr mean_se_
make.plot = function(){
utils::data("iris")
ggpubr::ggbarplot(
data = iris,
x = "Species",
y = "Sepal.Length",
add = "mean_se")
}
Затем вы запускаете devtools::document()
и запускаете свою функцию, и ваш вывод должен выглядеть так:
Этот должен работает, но, к сожалению, не работает. Хотя это предотвращает жалобы ggpubr, график, который он создает, неверен - он имеет кучу срезов в каждом баре, а не добавляет бары ошибок по желанию. Как ни странно, это поведение отличается от того, что делает «mean_se_», если вы сначала вызываете
library(ggpubr)
. Я обновил свой вопрос, чтобы показать желаемый результат.