Как избежать неоднозначности пространства имен для пользовательских функций - PullRequest
0 голосов
/ 13 апреля 2019

Предотвращение потенциальной однозначности от коллизий пространства имен для функций, которые поступают из библиотек, может быть достигнуто путем добавления имени пакета к вызову функции (например, dplyr::left_join, plyr::left_join и т. Д.), Как объяснено здесь

Как можно добиться этой однозначности для определенной пользователем функции?(то есть тот, который не пришел из библиотеки / пакета).Очевидно, вы не можете добавить имя пакета к функции, если функция не пришла из пакета

Пример

library(dplyr)
left_join <- function(x, y) { x + y }

dplyr::left_join(x,y) # Unambiguously calls left_join from dplyr
left_join(x, y) # Not clear whether from dplyr or user defined

Как можно однозначно вызывать пользовательские функции?

1 Ответ

0 голосов
/ 13 апреля 2019

Вот фиктивная функция, которую я написал. Я не проверял это строго, поэтому он может сломаться:

import_from_global<-function(what,...){
  func<-get(what,envir=.GlobalEnv) 
  do.call(func,list(...))
}

Тест:

select<-function(){
  cat("using namespace .GlobalEnv\n") 
  print("Does nothing")
}
import_from_global("select")

Результат:

using namespace .GlobalEnv
[1] "Does nothing"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...