0

名前の番号が異なる複数の関数を調達しようとしています。

例:func1、func2。

「func_1」と「func_2」を使用し、番号を最初に「1func」と「2func」にしてみました。関数名にどのようにインデックスを付けても、ソース関数はそれが呼び出す1つの関数を読み取るだけ"func"です。これは、私が望むものではありません。

私はforループとsapplyを使ってみました:

forループ:

func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE)
for(i in 1:length(func.list)){
source(func.list[i])
}

sapply:

sapply(func.list,FUN=source)

データ修正関数の複数のバージョンを作成し、それらにインデックスを付けられるようにしたいと考えています。簡潔で具体的な名前を付けるのは難しく、関数ファイルだけを選択的に取得できないためです。彼らのディレクトリ。

私のコードでは、func.listが出力を提供します(プライバシー/契約上の問題のため、実際のディレクトリを置き換えました):

[1] "mypath/1resp.correction.R" 
[2] "mypath/2resp.correction.R"

次に、forループコードまたはsapplyコード(上記のリスト)を使用してfunc.listを取得すると、Rは「2resp.correction.R」のコード本体を使用して、resp.correctionという名前の関数を1つだけロードします。

4

1 に答える 1

3

への引数sourceは、関数名ではなくファイル名です。したがって、ここで凝ることはできません。正確なファイル名を提供する必要があります。

2 つのファイルには、両方のファイルに同じ名前 ( resp.correction) の関数の定義が含まれているようです。そのため、ファイルを次々にソースすると、グローバル環境で関数が上書きされます。

ループ内で、関数を別の名前に再割り当てできます。

func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE)
for(i in 1:length(func.list)) {
   source(func.list[i], local = TRUE)
   assign(paste0("resp.correction", i), resp.correction, envir = .GlobalEnv)
} 
于 2012-09-14T15:21:22.237 に答える