Tüm işlevleri bir .R dosyasında tanımlayın, bunları başka bir .R dosyasından çağırın. Mümkünse nasıl?


95

Xyz.R gibi başka bir dosyadaki abc.R dosyasında tanımlanan işlevleri nasıl çağırırım?

Tamamlayıcı bir soru, abc.R'de tanımlanan işlevleri R isteminden / komut satırından nasıl çağırırım?

Yanıtlar:


141

source("abc.R")Ardından source("xyz.R")(bu dosyaların her ikisinin de geçerli çalışma dizininizde olduğunu varsayarak) çağırabilirsiniz .

Abc.R ise:

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

ve xyz.R:

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

o zaman bu işe yarayacak:

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

Döngüsel bağımlılıklar olsa bile, bu işe yarayacaktır.

Örneğin abc.R bu ise:

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

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

ve xyz.R şudur:

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

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

sonra,

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

10
Bir nüans: sourceBir dosyaya / işlevi yalnızca bir kez yapmanız gerekir . O zaman çalışma alanınızdadır ve istediğiniz zaman kullanabilirsiniz. Değiştirirseniz, yeniden kaynak sağlamanız gerekir. Kodu dönüştürdüğünüzden beri işlevleriniz çok değişiyorsa, hepsini tek bir dosyaya koyun ve her seferinde her şeyi kaynak haline getirin. Ayrıca, 1. daha büyük işlev koleksiyonunu sağlayan ve 2. Test durumlarınızı çalıştıran daha küçük ayrı bir dosyanız olabilir. R'de iş akışınızı düzenlemenin birçok yolu vardır.
Bryan Hanson

5
Nüans için teşekkürler Bryan. Bunu, prosedürel dillerden çoğu insanın merak edebileceği 2 senaryo olarak gösteriyordum. Sanki dosyalar döngüsel bağımlılığı eklemek için düzenlenmiş gibidir, bu durumda kaynaklarının sağlanması gerekir (gösterildiği gibi) ve döngüler dosyaların kaynağını etkilemez.
A_K

Her ikinize de teşekkür ederim. @A_K: Döngüsel bağımlılık sorununu vurguladığınız için çok teşekkürler. "İyileştirilebilir" R belgelerini araştırmaktan birkaç saat kurtardı :)
G Shah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.