SlideShare a Scribd company logo
1 of 14
Download to read offline
Зависимости пакета
NAMESPACE
Импорт и экспорт объектов в рабочее окружение
Алексей Селезнёв
Мой telegram канал
Дилемма зависимостей
Преимущества зависимостей Недостатки зависимостей
• Экономия времени на разработке, за счёт переиспользования
чужого кода
• Ваш код становится чувствителен к изменениям в сторонних
пакетах
• При установке вашего пакета, так же будут устанавливаться все
пакетыот которых он зависит, что увеличивает занимаемое им
место на жестком диске
ИСПОЛЬЗУЙТЕ В
ЗАВИСИМОСТЯХ ПАКЕТЫ,
КОТОРЫЕ В СВОЮ ОЧЕРЕДЬ
ТАК ЖЕ ИМЕЮТ НЕ МНОГО
СТОРОННИХ ЗАВИСИМОСТЕЙ
Какие компонентыпакета отвечают за зависимости
• Файл DESCRIPTION, позволяет указать какие пакеты будут установлены или
рекомендованы к установке вместе с вашим пакетом
• Поле Imports: указанные пакеты будут установлены вместе с вашим пакетом
• Поле Suggest: указанные пакеты будут рекомендованы к установке
• Поле Depends: указанные пакеты будут установлены и экспортированы вместе с вашим пакетом
• Файл NAMESPACE, управляет экспортом объектов в рабочее окружение
Какие компонентыпакета отвечают за зависимости
• Пакеты указанные в поле Imports файла DESCRIPTION не обязательно должны быть
указаны в NAMESPACE
• Но все пакеты и функции перечисленные в файле NAMESPACE, так же обязательно должны
быть указаны в полях Imports или Depends файла DESCRIPTION
Файл NAMESPACE
• Директивы файла NAMESPACE
• export(): экспортировать функцию (включая дженерики S3 и S4).
• S3method(): экспортировать метод S3.
• importFrom(): импортировать выбранный объект из другого пространства имен (включая дженерики
S4).
• import(): импортировать все объекты из пространства имен другого пакета.
• useDynLib(): регистрирует процедуры из DLL ( для пакетов с скомпилированным кодом).
Рабочий процесс
• Используйте в ваших R файлах специальные roxygen комментарии
• Запустите devtools::document() для генерации NAMESPACE файла
• Либо используйте функцию usethis::use_import_from()
Когда стоит экспортировать объекты сторонних пакетов
• Оператор: Вы не можете вызвать оператора из другого пакета через ::, поэтому его
необходимо импортировать. Примеры: оператор объединения NULL %||% из rlang или
пайплайн %>% из magrittr.
• Функция, которую вы часто используете . Если импорт функции делает ваш код более
читабельным, это достаточная причина для ее импорта. Это буквально уменьшает
количество символов, необходимых для вызова внешней функции.
• Функция, которую вы вызываете в жестком цикле с ::. Поиск объекта вызванного через два
двоеточия составляет порядка 100 нс, поэтому оно будет иметь значение только в том
случае, если вы вызываете функцию миллионы раз.
Пакет указан в Imports
• В коде пакета, т.е. в папке R/ обращайтесь к функциям из указанных в поле Imports пакетов
package::function()
• В тестах обращайтесь к функциям из указанных в поле Imports пакетов package::function().
Но если вы импортировали определенную функцию отдельно или как часть всего
пространства имен, вы можете просто вызвать ее непосредственно в тестовом коде.
• Если вы используете пакет, который указанный в Imports в одном из ваших примеров или
виньеток, вам нужно будет либо прикрепить пакет с помощью, library(package) либо
использовать package::function().
Пакет указан в Suggests
• В коде пакета, т.е. в папке R/ вы должны проверить наличие установленного пакета с
помощью базовой функции requireNamespace(), или функций из пакета rlang: is_installed() и
check_installed().
• В тестах вы можете использовать функцию testthat::skip_if_not_installed() для пропуска
тестов, если у пользовтаеля не установлены необходимые для их выполнения пакетов.
• Для использования пакетов указанных в Suggest в виньетках или примерах функций
используйте функции require() или requireNamespace(), для проверки доступен ли
необходимый пакет.
Пакет указан в Depends
• В коде пакета, т.е. в папке R/ и в тестах обращайтесь к функциям из указанных в поле
Imports пакетов package::function().
• В виньетках и примерах не требуется отдельно подключать через library() пакеты
указанные в поле Depends.
Импорт и экспорт S3 методов
• Экспортируете основную дженерик функцию через директиву export()
• Регистрируете её методы написанные под обработку объектов различных классов с
помощью директивы S3method()
СПАСИБО ЗА ВНИМАНИЕ

More Related Content

Similar to 6.dependecies.pdf

Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Mail.ru Group
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”GlobalLogic Ukraine
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOSquakke
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?COMAQA.BY
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCOMAQA.BY
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты7bits
 

Similar to 6.dependecies.pdf (20)

Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
 
function_docs.pdf
function_docs.pdffunction_docs.pdf
function_docs.pdf
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
3-r-code.pdf
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Архитектура ROS
Архитектура ROSАрхитектура ROS
Архитектура ROS
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 

More from Алексей Селезнёв

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Алексей Селезнёв
 
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Алексей Селезнёв
 
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...Алексей Селезнёв
 
Учим язык R на примере SQL запросов (Product Star Conference)
Учим язык R на примере SQL запросов (Product Star Conference)Учим язык R на примере SQL запросов (Product Star Conference)
Учим язык R на примере SQL запросов (Product Star Conference)Алексей Селезнёв
 
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...Алексей Селезнёв
 
Алексей Селезнёв - Работа с Facebook Marketing API на Языке R
Алексей Селезнёв - Работа с Facebook Marketing API на Языке RАлексей Селезнёв - Работа с Facebook Marketing API на Языке R
Алексей Селезнёв - Работа с Facebook Marketing API на Языке RАлексей Селезнёв
 
Три шага построения аналитики компании (Lviv iCamp 2018)
Три шага построения аналитики компании (Lviv iCamp 2018)Три шага построения аналитики компании (Lviv iCamp 2018)
Три шага построения аналитики компании (Lviv iCamp 2018)Алексей Селезнёв
 

More from Алексей Селезнёв (20)

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
 
gargle.pdf
gargle.pdfgargle.pdf
gargle.pdf
 
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
 
10.website.pdf
10.website.pdf10.website.pdf
10.website.pdf
 
07-testing.pdf
07-testing.pdf07-testing.pdf
07-testing.pdf
 
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
 
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
 
Бекенды dplyr
Бекенды dplyrБекенды dplyr
Бекенды dplyr
 
Пакет future
Пакет futureПакет future
Пакет future
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Пакет purrr
Пакет purrrПакет purrr
Пакет purrr
 
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
 
Циклы в R
Циклы в RЦиклы в R
Циклы в R
 
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
Зачем интернет маркетологу понимать что такое API. Разбираем устройство API G...
 
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...
Как работать с API Google Analytics на языке R с помощью пакета googleAnalyti...
 
Учим язык R на примере SQL запросов (Product Star Conference)
Учим язык R на примере SQL запросов (Product Star Conference)Учим язык R на примере SQL запросов (Product Star Conference)
Учим язык R на примере SQL запросов (Product Star Conference)
 
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...
Алексей Селезнёв - Как держать руку на пульсе с помощью информационных дайдже...
 
Алексей Селезнёв - Работа с Facebook Marketing API на Языке R
Алексей Селезнёв - Работа с Facebook Marketing API на Языке RАлексей Селезнёв - Работа с Facebook Marketing API на Языке R
Алексей Селезнёв - Работа с Facebook Marketing API на Языке R
 
Три шага построения аналитики компании (Lviv iCamp 2018)
Три шага построения аналитики компании (Lviv iCamp 2018)Три шага построения аналитики компании (Lviv iCamp 2018)
Три шага построения аналитики компании (Lviv iCamp 2018)
 

6.dependecies.pdf

  • 1. Зависимости пакета NAMESPACE Импорт и экспорт объектов в рабочее окружение Алексей Селезнёв
  • 3. Дилемма зависимостей Преимущества зависимостей Недостатки зависимостей • Экономия времени на разработке, за счёт переиспользования чужого кода • Ваш код становится чувствителен к изменениям в сторонних пакетах • При установке вашего пакета, так же будут устанавливаться все пакетыот которых он зависит, что увеличивает занимаемое им место на жестком диске
  • 4. ИСПОЛЬЗУЙТЕ В ЗАВИСИМОСТЯХ ПАКЕТЫ, КОТОРЫЕ В СВОЮ ОЧЕРЕДЬ ТАК ЖЕ ИМЕЮТ НЕ МНОГО СТОРОННИХ ЗАВИСИМОСТЕЙ
  • 5. Какие компонентыпакета отвечают за зависимости • Файл DESCRIPTION, позволяет указать какие пакеты будут установлены или рекомендованы к установке вместе с вашим пакетом • Поле Imports: указанные пакеты будут установлены вместе с вашим пакетом • Поле Suggest: указанные пакеты будут рекомендованы к установке • Поле Depends: указанные пакеты будут установлены и экспортированы вместе с вашим пакетом • Файл NAMESPACE, управляет экспортом объектов в рабочее окружение
  • 6. Какие компонентыпакета отвечают за зависимости • Пакеты указанные в поле Imports файла DESCRIPTION не обязательно должны быть указаны в NAMESPACE • Но все пакеты и функции перечисленные в файле NAMESPACE, так же обязательно должны быть указаны в полях Imports или Depends файла DESCRIPTION
  • 7. Файл NAMESPACE • Директивы файла NAMESPACE • export(): экспортировать функцию (включая дженерики S3 и S4). • S3method(): экспортировать метод S3. • importFrom(): импортировать выбранный объект из другого пространства имен (включая дженерики S4). • import(): импортировать все объекты из пространства имен другого пакета. • useDynLib(): регистрирует процедуры из DLL ( для пакетов с скомпилированным кодом).
  • 8. Рабочий процесс • Используйте в ваших R файлах специальные roxygen комментарии • Запустите devtools::document() для генерации NAMESPACE файла • Либо используйте функцию usethis::use_import_from()
  • 9. Когда стоит экспортировать объекты сторонних пакетов • Оператор: Вы не можете вызвать оператора из другого пакета через ::, поэтому его необходимо импортировать. Примеры: оператор объединения NULL %||% из rlang или пайплайн %>% из magrittr. • Функция, которую вы часто используете . Если импорт функции делает ваш код более читабельным, это достаточная причина для ее импорта. Это буквально уменьшает количество символов, необходимых для вызова внешней функции. • Функция, которую вы вызываете в жестком цикле с ::. Поиск объекта вызванного через два двоеточия составляет порядка 100 нс, поэтому оно будет иметь значение только в том случае, если вы вызываете функцию миллионы раз.
  • 10. Пакет указан в Imports • В коде пакета, т.е. в папке R/ обращайтесь к функциям из указанных в поле Imports пакетов package::function() • В тестах обращайтесь к функциям из указанных в поле Imports пакетов package::function(). Но если вы импортировали определенную функцию отдельно или как часть всего пространства имен, вы можете просто вызвать ее непосредственно в тестовом коде. • Если вы используете пакет, который указанный в Imports в одном из ваших примеров или виньеток, вам нужно будет либо прикрепить пакет с помощью, library(package) либо использовать package::function().
  • 11. Пакет указан в Suggests • В коде пакета, т.е. в папке R/ вы должны проверить наличие установленного пакета с помощью базовой функции requireNamespace(), или функций из пакета rlang: is_installed() и check_installed(). • В тестах вы можете использовать функцию testthat::skip_if_not_installed() для пропуска тестов, если у пользовтаеля не установлены необходимые для их выполнения пакетов. • Для использования пакетов указанных в Suggest в виньетках или примерах функций используйте функции require() или requireNamespace(), для проверки доступен ли необходимый пакет.
  • 12. Пакет указан в Depends • В коде пакета, т.е. в папке R/ и в тестах обращайтесь к функциям из указанных в поле Imports пакетов package::function(). • В виньетках и примерах не требуется отдельно подключать через library() пакеты указанные в поле Depends.
  • 13. Импорт и экспорт S3 методов • Экспортируете основную дженерик функцию через директиву export() • Регистрируете её методы написанные под обработку объектов различных классов с помощью директивы S3method()