Как импортировать файл в R и дать ему имя - PullRequest
1 голос
/ 01 ноября 2019

У меня есть класс R, который выглядит следующим образом

source("data_validation.R")

data_validation.mymodel <- function(mymodel,newdata=list()) {

  data_validation(newdata)
}

У меня есть функция с именем data_validation, в которой мне нужно вызвать другую функцию из другого файла, который я получаю с тем же именем. Но он выдает ошибку и не может найти функцию в другом файле, потому что он имеет то же имя. Как я могу иметь псевдоним для своих функций в файле data_validation.R, чтобы я мог легко различить эти 2 функции (то есть что-то похожее на python, где я могу сказать import data_validation как dv)

1 Ответ

0 голосов
/ 01 ноября 2019

До тех пор, пока вы:

  1. должны source файлы, порок превращает хотя бы один из них в формальный пакет;и
  2. Невозможно изменить имя функции или функции, определенной в этих исходных файлах,

вам придется обходить вещи, чтобы иметь возможность использовать обе функции.

Вот хак, который может сработать для вас.

  1. Я начинаю с простого файла foo.R, который просто определяет одну функцию:

    myfunc <- function(x) x+1
    
  2. В глобальной среде я загрузлю и протестирую его:

    source("~/Downloads/foo.R")
    myfunc(2)
    # [1] 3
    
  3. Но допустим, у меня есть другой файл (foo2.R) с той же функцией:

    myfunc <- function(x) x+1000
    
  4. Давайте напишем обертку вокруг источника, которая ищет именно эту функцию:

    wrap_source <- function(...) { source(..., local = TRUE); environment(); }
    
    ls(envir=wrap_source("~/Downloads/foo2.R"))
    # [1] "myfunc"
    
    other <- wrap_source("~/Downloads/foo2.R")
    myfunc(1)
    # [1] 2
    other$myfunc(1)
    # [1] 1001
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...