2012-09-07 96 views
8

我想在R中創建一個包,其中我創建了很多新的自定義類。每個班級都在不同的文件中。類從父類繼承並繼承到其他類。鏈接多個文件,同時在R中創建一個包

在運行我的代碼我叫他們每個人喜歡這個

source("package/father.R") 
source("package/son.R") 
source("package/grandson.R")  

對於一些通過在子類中定義的孫子類所需的方法定義。我使用package.skeleton()來調用它們並創建一個包,它似乎工作正常。但是當運行R CMD Check(以及試圖安裝到R時)時,它會拋出一個錯誤,因爲該函數試圖按字母順序調用文件,所以文件grandson.R在son.R之前調用,它顯示並顯示錯誤該方法尚未定義。如果我將名稱更改爲zgrandson.R,R將該文件稱爲最後一個,並且一切看起來都很好,但這顯然不是問題的解決方案。

我已經閱讀了關於創建包的教程,但是他們都似乎處理了R中沒有繼承/調用其他文件的簡單情況。希望我已經說清楚了。

+0

第一篇文章很不錯。 –

+2

「如果我將名稱更改爲zgrandson.R,R將該文件稱爲最後一個文件,並且所有內容似乎都可以正常工作,但顯然這不是解決問題的辦法。」爲什麼?這正是我使用的解決方案以及其他許多方法(以'00Classes.R'開始第一個腳本)。 –

+0

這工作正常,但看起來像這樣一個醜陋/ hackish方式來解決問題:D。感謝您告訴我其他人也在使用此解決方法。雖然我不知道這個問題是否與我的代碼結構本身有關,因爲我經歷過的好程序員的腳本似乎都沒有調用其他文件。 –

回答

5

據我所知,你可以使用DESCRIPTION文件中的Collate字段來控制這個。

Writing R Extensions manual引用:

一個「分頁」字段可以被用於當這些是包 安裝處理控制歸類順序爲 在封裝將R代碼的文件。默認值是根據'C'語言環境進行整理。 如果存在,整理規範必須列出 包中的所有R代碼文件(考慮到可能的操作系統特定子目錄, 請參閱包子目錄)作爲文件 相對於R子目錄的空白分隔列表。包含空格或 引號的路徑需要引用。將使用特定於操作系統的校對字段 ('Collat​​e.unix'或'Collat​​e.windows')來代替 '校對'。

所以,你可以指定:

Collate: 
    father.r 
    son.R 
    grandson.r 

或者乾脆以這樣的方式字典排序順序將導致正確的排序順序,當你在你的問題表明重命名文件。


但也可以通過@DirkEddelbuettel在類似的問題上看到this answer

+0

完美答案!非常感謝超級快速回復:) –

相關問題