web-dev-qa-db-ja.com

Rでユーザー作成関数を作成する

これが以前に尋ねられた場合は申し訳ありませんが、答えを見つけることができません。

Rで小さな関数を書いたとしましょう

add2<-function(a){
return(a+2)
}

これをadd2.Rとしてホームディレクトリ(または任意のディレクトリ)に保存します。 Rにそれを見つけるにはどうすればよいですか?

> add2(4)
Error: could not find function "add2"

スクリプトを開いて、コンソールにコピーして貼り付け、実行すると、機能します。しかし、どのようにしてそれを組み込みますか?それで、Rを開いたり閉じたりしても、それをコピーして貼り付けなくても実行できますか?

16
stuppie

1つの軽量オプション:

_dump("add2", file="myFunction.R")

## Then in a subsequent R session
source("myFunction.R")
_

代替:

_save("add2", file="myFunction.Rdata")

## Then just double click on "myFunction.Rdata" to open  
## an R session with add2() already in it 

## You can also import the function to any other R session with
load("myFunction.Rdata")
_

関数を独自のプライベートパッケージにパッケージ化して整然とした形で格納する準備ができるまでは、source()- readyテキストファイル(上記の最初の例のように)がおそらく最良の戦略です。経験豊富なuseRがこのアプローチを実践する方法の例については、 これは非常に高い投票SO質問 を参照してください。

18
Josh O'Brien

自動的に起動する場合は、起動スクリプトを設定してから、上記の回答で概説した方法のいずれかを使用する必要があります。

/Library/Frameworks/R.framework/Versions/2.15/Resources/etc/は(Macの場合)Rprofile.siteの場所であり、適切に編集する必要があります。

それの私のバージョンは:

.First <- function()
{ 
    dir='~/Desktop/Infobase/R/0_init/0_init.R'
    if(file.exists(dir))
    {
    source(dir, chdir = TRUE) 
    } else {cat("startup file is not found at:",dir)}
    cat("\nWelcome at", date(), "\n")
}    

.Last <- function()
{ 
cat("\nGoodbye at ", date(), "\n")
}

1 Rスクリプトを入手した後は、このファイルを入力する必要はありません。入手したファイルから必要なことをすべて実行してください。私の場合、ファイル「0_init.R」には関数が含まれていません。他のスクリプトのロードが含まれているだけです。さて、あなたはアイデアを持っています。

また、これを行っている場合は、新しい環境に保管することをお勧めします。実際の環境は、独自の機能にはあまり適していません(パッケージを開発している場合は、より適切に実装できます。そうでない場合は、多くの制御が失われます)。

「attach」、「detach」、「search」などを使用します。

attach(FUN,name="af2tr")
4
dgrigonis

関数を呼び出す前に(スクリプトの最初など)、ユーザー定義関数を含むファイルをsourceする必要があります。つまり、

source("add2.R") # this executes add2.R script loading add2 function

基本的に、source関数は、引数として渡されたスクリプトに含まれているコードを実行します。したがって、ファイルに関数定義のみが含まれている場合は、将来使用するために関数をメモリにロードします。

4
digEmAll