ggplot2 внутри пакетов R: примечания во время тестов CRAN

Я пишу пакет R, который использует множество функций ggplot2. Проблема в том, что во время тестов CRAN у меня появилось много замечаний, связанных с ggplot функциями (см. ниже). Учитывая эту ситуацию, как лучше всего использовать ggplot2 внутри моих функций, чтобы избежать этих заметок от CRAN?

Пример моего кода:

s1 <- ggplot2::ggplot(result,aes(x=slope,y=..density..),
            environment = environment())+
            geom_histogram(fill="lightyellow", 
                           alpha=.9,colour="grey60", size=.2) +
            geom_density(size=.2) +
            geom_vline(xintercept = slope.0,color="red",linetype=2,size=.7)+
            xlab("Estimated slopes")+
            theme(axis.text = element_text(size=14),
                  axis.title = element_text(size=16))

КРАН отмечает:

plot_influ_phylolm: нет видимого определения глобальной функции для 'aes'
plot_influ_phylolm: нет видимой привязки для глобальной переменной 'slope'
plot_influ_phylolm: нет видимой привязки для глобальной переменной '..density..'
plot_influ_phylolm: нет видимой определение глобальной функции для 'geom_histogram'
plot_influ_phylolm: нет видимого определения глобальной функции для 'geom_density'
plot_influ_phylolm: нет видимого определения глобальной функции для 'geom_vline' plot_influ_phylolm: нет видимого определения глобальной функции для 'xlab'
plot_influ_phylolm : нет видимого определения глобальной функции для «темы»


person Gustavo B Paterno    schedule 02.08.2015    source источник


Ответы (2)


Не для того, чтобы защищать правила, но пока вы решаете, откуда берутся все импорты, вы всегда можете использовать следующее для global variables:

slope <- density <- NULL

Добавьте приведенное выше в файл .R, в котором эти переменные встречаются, до того, как переменные появятся как таковые в коде. Этот вопрос более подробно рассмотрен на этом сайте здесь и здесь.

Что касается определений функций, сложно определить, какие именно функции вы собираетесь импортировать с пространством имен размером ggplot2, поэтому, возможно, проще всего импортировать весь пакет. Я понимаю, что это также не «лучшая практика», но она должна помочь вам пройти проверки CRAN. При использовании roxygen я обычно использую файл описания для пакета, например. myPkg_package.R:

#' @name myPkg-package
#' @docType package
#' @keywords package
#'
#' @import ggplot2
#'
NULL

или, для выборочного импорта:

#' @importFrom ggplot2 theme

Затем вы захотите отредактировать файл DESCRIPTION, включив в него что-то вроде:

Imports: ggplot2

Вы даже можете использовать для этого Depends:, но зависимости от нескольких пакетов (например, > 4) в CRAN не рекомендуются.

Конечно, вы можете указывать NAMESPACE каждый раз, например. меняйте theme на ggplot2::theme каждый раз, когда вы вызываете функцию. Возможно, это делает код более понятным, хотя может стать немного утомительным и увеличивает время выполнения. Это по-прежнему требует, чтобы вы объявляли импорт, как указано выше.

person dardisco    schedule 02.08.2015
comment
Большое спасибо за объяснение. Я попробую это и дам вам знать, если сработало! - person Gustavo B Paterno; 03.08.2015
comment
Отлично, это решило мою проблему! Я использовал @importFrom ggplot2 aes geom_point и т. д. Теперь заметки исчезли. Переменные, которые я решил с помощью метода NULL. переменная1 ‹- переменная2 ‹- NULL. - person Gustavo B Paterno; 03.08.2015

Вам нужно добавить соответствующие Imports: к DESCRIPTION и importFrom(...) к NAMESPACE. Недавно это обсуждалось довольно много, см., например, эта ветка на r-package-devel и ссылки на нее для дальнейшего обсуждения.

person Dirk Eddelbuettel    schedule 02.08.2015
comment
Спасибо за ответ, я посмотрю ветку и дам вам обратную связь. - person Gustavo B Paterno; 03.08.2015