Визначте всі функції в одному .R-файлі, викликайте їх з іншого .R-файлу. Як, якщо це можливо?


93

Як мені викликати функції, визначені у файлі abc.R, в іншому файлі, скажімо xyz.R?

Додаткове запитання полягає в тому, як мені викликати функції, визначені в abc.R, із рядка підказки / командного рядка R?

Відповіді:


137

Ви можете зателефонувати source("abc.R")за яким слід source("xyz.R")(припускаючи, що обидва ці файли знаходяться у вашому поточному робочому каталозі.

Якщо abc.R:

fooABC <- function(x) {
    k <- x+1
    return(k)
}

а xyz.R - це:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

тоді це буде працювати:

> source("abc.R")
> source("xyz.R")
> fooXYZ(3)
[1] 5
> 

Навіть якщо існують циклічні залежності, це спрацює.

Наприклад, якщо abc.R це:

fooABC <- function(x) {
    k <- barXYZ(x)+1
    return(k)
}

barABC <- function(x){
    k <- x+30
    return(k)
}

і xyz.R це:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

barXYZ <- function(x){
    k <- barABC(x)+20
    return(k)
}

тоді,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>

9
Нюанс: вам потрібно лише sourceодин раз надіслати файл / функцію. Тоді він знаходиться у вашій робочій області, і ви можете ним користуватися в будь-який час. Якщо ви його змінили, вам доведеться використати його повторно. Якщо ваші функції сильно змінюються, оскільки ви перетворюєте код, помістіть їх все в один файл і щоразу просто отримуйте все це. Ви також можете мати окремий менший файл, який 1. створює більшу колекцію функцій і 2. Запускає тестові кейси. У R існує безліч способів організувати робочий процес.
Брайан Хенсон,

5
Дякую за нюанс, Брайане. Я демонстрував це як 2 сценарії, над якими може задуматись більшість людей із процедурних мов. Це як би файли були відредаговані, щоб додати циклічну залежність, і в цьому випадку вони потребують ресурсів (як показано), і цикли не впливають на джерело файлів.
A_K

Дякую вам обом. @A_K: велике спасибі за висвітлення проблеми циклічної залежності. Врятував кілька годин копання в "можна покращити" документацію щодо R :)
G Shah
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.