Загрузить пакет отдельно от одной функции - PullRequest
0 голосов
/ 23 октября 2018

Я хотел бы загрузить весь пакет, кроме одной функции.

Я вижу обходные пути, такие как Как загрузить только определенные функции из пакета , но это не удовлетворяет мои полные потребности,

Особая проблема заключается в загрузке функции select () в пакетах MASS и tidyverse, но я бы хотел найти более общее решение.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы сделаете select <- MASS::select, с вами все будет в порядке.

Если вы действительно не хотите этого в своем глобальном рабочем пространстве, вы можете это сделать, добавив MASS (опционально) и dplyr:

attach(list(select=MASS::select),name = "front_select")

Таким образом, он найдет его раньше других, потому что среда front_select будет встречаться первой в пути поиска.

Это не очень ортодоксально.

Предполагается, что вы хотите это для интерактивного использования, если не обязательно использовать :: нотацию.


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

library(dplyr)
x <- as.list(as.environment("package:dplyr"))
detach("package:dplyr")
x$select <- NULL
attach(x,name = "package:dplyr")
mutate
# function (.data, ...) 
# {
#     UseMethod("mutate")
# }
# <bytecode: 0x00000000190069c0>
# <environment: namespace:dplyr>

select
# Error: object 'select' not found

из ?search:

Имена, начинающиеся с "package:", зарезервированыдля библиотеки и не должны использоваться конечными пользователями.

0 голосов
/ 23 октября 2018

Есть три хороших способа сделать это, возрастая в сложности:

1.conflicted

Он проверяет конфликты имен и не позволяет использовать маскированные или маскирующие функции, если в этом случае выдается ошибка.Но вы можете объявить предпочтение для сеанса, например:

conflict_prefer("filter", "dplyr")
#> [conflicted] Will prefer dplyr::filter over any other package

конфликтует на Github

2.import

Позволяет явно импортировать определенные функции из пакетов (и, если хотите, дать им произвольное имя)

import::from(ggplot2, g = ggplot, aes, geom_point)
g(iris, aes(Petal.Width, Petal.Length)) + geom_point()

импорт на Github

3.modules

Это дает вам Python-удобный способ импорта как модулей (записанных в виде исходных файлов R), так и библиотек, и более согласованным образом.Хорошая (но продвинутая) вещь в том, что модули, если они имеют подгруппы, могут быть загружены частично, например, str = import('tools/strings').Однако это не работает для пакетов, поскольку они написаны как монолиты.Модули имеют некоторые преимущества в отношении кодирования, но заставят вас написать:

dplyr = import_package('dplyr')
cars %>% dplyr$filter(speed > 15)

модулей на Github

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