Ggpubr не может найти «mean_se», если ggpubr не подключен через библиотеку ()

Краткое описание проблемы: Когда я пытаюсь добавить сводную статистику на график 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 не подключен через библиотеку ()

Но передача "ggpubr::mean_se_" вместо этого производит: Ggpubr не может найти «mean_se», если ggpubr не подключен через библиотеку ()

Дополнительные странности: Если я Когда-либо добавлю вызов для загрузки ggpubr, соберу MyPackage с помощью devtools::load_all(".") и запущу его, то приведенный выше код никогда не будет работать до тех пор, пока я не выйду и не перезагружу RStudio, даже если я удалю вызов library(ggpubr) из своего пакета и соберу его снова.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы посмотрите на то, как параметр 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)

Этот должен работает, но, к сожалению, не работает. Хотя это предотвращает жалобы ggpubr, график, который он создает, неверен - он имеет кучу срезов в каждом баре, а не добавляет бары ошибок по желанию. Как ни странно, это поведение отличается от того, что делает «mean_se_», если вы сначала вызываете library(ggpubr). Я обновил свой вопрос, чтобы показать желаемый результат.

Azura's Starfish 04.05.2022 20:06

@Azura'sStarfish Я вижу. Проверьте мое обновление.

Allan Cameron 04.05.2022 20:51
Ответ принят как подходящий

Поскольку вы создаете пакет, вы можете убедиться, что 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() и запускаете свою функцию, и ваш вывод должен выглядеть так:

a plot

Другие вопросы по теме

Похожие вопросы

Работа с именами и значениями объектов в списке в R с использованием циклов
Как создать столбец, в котором указано количество вхождений X в другой столбец?
Выделение определенных элементов на графике Igraph с использованием другого фрейма данных
Как добавить линии поверх гистограммы столбца, где линии проходят по середине верхней части столбцов, учитывая столбцы с position = 'dodge'?
Я хочу удалить идентификаторы, у которых нет информации в остальных столбцах
Подсчет отрицательных значений, остановка, когда среди последних наблюдений есть положительное, все выполняется группой
Как вставить строку текста поверх таблицы, загруженной с помощью обработчика блестящей загрузки?
Как заказать непрерывную ось X на графике регрессии в ggplot2 R?
Пакет R stargazer выводит две таблицы вместо одной
Извлечение третьей части строки в новый столбец, только если он существует