すべての関数を1つの.Rファイルで定義し、別の.Rファイルから呼び出します。可能であれば、どうですか?


93

abc.Rファイルで定義された関数を別のファイル、たとえばxyz.Rで呼び出すにはどうすればよいですか?

補足的な質問は、Rプロンプト/コマンドラインからabc.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つのファイルに入れて、毎回すべてをソースするだけです。また、1。機能のより大きなコレクションを調達し、2。テストケースを実行する別の小さなファイルを使用することもできます。Rには、ワークフローを調整する方法がたくさんあります。
ブライアンハンソン

5
ニュアンスをありがとう、ブライアン。これを、手続き型言語のほとんどの人が疑問に思う2つのシナリオとして示しました。これは、ファイルが循環依存関係を追加するために編集されたかのようです。
A_K 2012年

二人ともありがとうございました。@A_K:循環依存の問題を強調してくれてありがとう。「改善できる」Rのドキュメントを掘り下げるのに数時間節約できました:)
G Shah
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.