R - как сделать базовую функцию "слияния" функцией по умолчанию - PullRequest
2 голосов
/ 03 апреля 2020

Я довольно R newb ie, поэтому прошу прощения, если мой простой вопрос. У меня есть много R-скриптов, которые используют функцию базового слияния. Вчера мне пришлось установить библиотеку конфигурации, и это полностью испортило функцию слияния, поскольку она также определена внутри congif. Я прочитал этот полезный пост: R - не могу объединить фрейм данных после установки пакета конфигурации , но мой вопрос здесь другой. Я не могу go через десятки R-скриптов и заменить «merge ()» на «base :: merge ()».

Так что мой очень простой вопрос следующий и очень похож на обсуждаемый здесь : R: 2 функции с одинаковыми именами в 2 разных пакетах

как я могу указать использование версии "base ::" функции "merge ()" в качестве версии по умолчанию? Или - есть ли способ не устанавливать функцию "merge ()", содержащуюся в пакете конфигурации? Большое спасибо

1 Ответ

1 голос
/ 03 апреля 2020

Принятый ответ на R - не удается объединить фрейм данных после установки пакета конфигурации. указывает пользователю явно ссылаться на функции из пакета config как config::merge() или config::get().

Другой способ решения проблемы config masking base::merge() состоит в том, чтобы загрузить пакет config, использовать его для настройки среды и затем использовать detach() для удаления пакета. Это снимет маску base::merge().

library(config)
# use config functions to set up environment
#

На этом этапе мы можем показать, что config::merge является значением по умолчанию, печатая функцию merge().

> merge
function (base_config, merge_config) 
{
    merge_lists(base_config, merge_config, recursive = TRUE)
}
<bytecode: 0x7fcddf5de488>
<environment: namespace:config>
>

Для восстановления base::merge() по умолчанию мы используем функцию detach().

detach(package:config)
# at this point base::merge() and base::get() are unmasked

Чтобы продемонстрировать это, мы снова напечатаем функцию merge().

> detach(package:config)
> # print merge function to show it is from base package 
> merge
function (x, y, ...) 
UseMethod("merge")
<bytecode: 0x7fcde7c08e70>
<environment: namespace:base>
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...