Использование отдельных функций из пакета - PullRequest
0 голосов
/ 20 января 2019

Использование отдельных функций из незагруженного пакета

Со временем я загружаю все больше и больше пакетов в начале сеанса R.Просто загрузка tidyverse загружает больше пакетов, чем было моей нормой.Из-за этого я все чаще сталкиваюсь с конфликтами имен функций.Особенно, когда я не замечал эти конфликты во время загрузки пакета, это может привести к путанным результатам и странным ошибкам.Поэтому мне интересно, могу ли я вообще импортировать конкретную функцию, которую я хочу использовать, без загрузки пакета, из которого она поступает.

Точнее, если this_pack - это пакет, который установлен локальноно не загружен, и this_fn() является экспортированной функцией в этом пакете, могу ли я ожидать, что this_pack::this_fn() будет работать и работать так же, как если бы был загружен весь пакет?Я знаю, что обычно так и есть, но я хочу знать, если бы я ожидал, что это не удастся.

См. Ответы на связанные вопросы для получения дополнительной информации:

Я принялответ пользователя 2554330, который, я думаю, не будет ответом на другие упомянутые вопросы.Тем не менее, они предоставляют интересную и связанную информацию о других причинах использования или неиспользования ::, поэтому я думаю, что сохранение перекрестной ссылки, вероятно, хорошая идея.Я включил их выше.

1 Ответ

0 голосов
/ 20 января 2019

Да, в наше время всегда можно безопасно звонить this_pack::this_fn().Если this_pack не был загружен, это загрузит его (все это).(Помните, что загрузка и присоединение пакета различны! При загрузке он получает его в памяти, но не в списке поиска. При его прикреплении он помещается в список поиска.) Это может сделать первый вызов немного медленным, но пакет останетсязагружен, поэтому последующие звонки будут быстрее.Раньше было так, что оценка :: занимала заметное количество времени в каждом вызове, но я думаю, что компиляция точно в срок это в основном убрала.Но если вы хотите, вы можете получить локальную копию, используя

local_copy <- this_pack::this_fn

, а затем совершать вызовы на local_copy(), не платя за поиск :: снова.

Поскольку все пакеты имеют пространства именлюбые вызовы, сделанные this_pack::this_fn() (или local_copy()), будут направлены в нужное место, если только автор пакета не будет очень стараться подорвать обычные механизмы.

Если вы пишете пакет самостоятельно,Вы можете импортировать только эту функцию.Это будет означать, что загрузка вашего пакета вызовет загрузку this_pack: поэтому ваша загрузка будет немного медленнее, но первый вызов this_fn() будет быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...