2012-09-14 17 views
0

我試圖找出多個函數,這些函數的名稱不同。如何阻止來源縮寫函數名稱?

例如:func1,func2。

我試過使用「func_1」和「func_2」,並且把數字放在第一位,「1func」和「2func」。無論我如何索引函數名稱,源函數都會讀取一個函數,它稱爲"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" 

後來,當我源func.list與任何for循環或sapply代碼(上面列出),R只加載一個名爲resp.correction的函數,其代碼體來自「2resp.correction.R」。

+4

這聽起來並不像標準源的行爲,請讓您的example.reproducible。 –

+0

你當然*不能*把數字放在第一位,比如'1func'-這在R(或大多數語言)中不是合法的標識符。 –

+0

@David Robinson:謝謝你的輸入。只是爲了進一步澄清,我試過(沒有成功)使用以下格式:「func1」,「func_1」和「1func」。 – dayne

回答

3

source的參數是文件名,而不是函數名。所以你不能在這裏看中:你需要提供確切的文件名。

聽起來你的兩個文件在兩個文件中都包含同名函數(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) 
} 
+0

非常感謝!我現在意識到我沒有更改文件中的函數名稱。我覺得自己像一個巨大的白癡,但再次感謝你。 – dayne