R: из файла импорта foo as bar - PullRequest
0 голосов
/ 30 мая 2018

Я ищу метод, который объединяет следующие два вопроса:

Определите все функции в одном файле .R, вызовите их из другого файла .R.Как, если это возможно?

R-эквивалент Python from x import y as z

Другими словами, я хочу импортировать определенную функцию от кого-тоостальное .r файл.Под другим именем.

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Вы можете использовать source следующим образом:

В сценарии test.R:

test <- function() message("Hello")

Затем получить этот файл, используя

someone <- new.env()
source("test.R", someone)

Для вызовачей-то код, используйте

someone$test()

Если возможно, попросите кого-нибудь написать пакет R.

0 голосов
/ 30 мая 2018

Мы вызываем source с local=TRUE внутри новой функции и возвращаем только необходимую функцию:

source1 <- function(path,fun){
  source(path, local= TRUE)
  get(fun)
}

from x import y as z будет записано:

z <- source1(x,y) # where y is a string

Пример:

# create 'test.R' file in working directory
write("test  <- function(a,b) a + b
      test2 <- function(a,b) a - b",
      "test.R")

new_fun <- source1("test.R","test2")

new_fun
# function(a,b) a - b
# <environment: 0x0000000014873f08>

test
# Error: object 'test' not found

test2
# Error: object 'test2' not found

# clean up
unlink("test.R")
0 голосов
/ 30 мая 2018

AFAIK нет такого механизма в R.

Конечно, вы можете сделать

x.R y <- function() {do_something}

z.R source("x.R") z <- y rm(y)

Лучшие вариантыбыло бы сделать x.R в пакет.Затем вы просто делаете z <- x::y

Лучшее решение - конвертировать x.R и z.R в пакеты и использовать @importFrom x y в пакет z и не беспокоиться об изменении именифункция.

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