2015-04-04 181 views
0

我正在編寫一個包含其他幾個導出函數使用的內部函數的包,但導出的函數都具有不同的參數。如何記錄調用相同函數但具有不同參數的函數?

這裏是我的意思簡化:

general <- function(...) { 
    # do something based on which function was called 
} 
one <- general 
two <- general 

我知道這似乎不可思議,但所有被化名爲general功能使用完全相同的代碼,但它們有不同的參數。所以我可能會打電話one(id = "foo")或​​。

我的問題是如何用Rxygen以R CMD檢查不會投訴的方式記錄這些函數?

我想記錄影響其正常參數的各項功能,所以這是什麼,我希望能夠使用:

general <- function(...) { 
    # do something based on which function was called 
} 
#' @param id The id 
#' @export 
one <- general 
#' @param class The class 
#' @export 
two <- general 

但後來我得到警告,當我檢查我的包,如

* checking Rd \usage sections ... WARNING 
Undocumented arguments in documentation object 'one' 
    '...' 
Documented arguments not in \usage in documentation object 'one': 
    'id' 

two函數的類似警告。

我試圖用手工編輯.Rd文件改變

\usage{ one(...) } 

進入

\usage{ one(id) } 

要嘗試解決此警告,但是當我運行檢查它似乎是在創建文檔再次覆蓋我的改變。

是否有解決方法?

感謝

回答

4

具有實際上都一樣的功能似乎混亂,不會有產生,在這種安排通過R CMD check標準的R文件的方式別名的想法。

一個更好的方法是編寫函數onetwo作爲圍繞general的包裝,可以將參數傳遞給它,而不是別名。這樣,你可以給他們實際的參數,你可以使用標準的Rd標記(或roxygen,如果這是你如何生成你的文檔)文檔。從最終用戶的角度來看,這將更加清晰,並且不應該讓您更難設計爲開發人員。

編輯:基於您的評論,這可能是工作如下:

general <- function(..., from) { 
    if(from == "one") { 
     # do stuff 
    } else if (from == "two") { 
     # do other stuff 
    } 
} 

one <- function(...) { 
    general(..., from = "one") 
} 

two <- function(...) { 
    general(..., from = "two") 
} 

這樣您就可以知道哪些功能原名不依靠match.call,這似乎真的很危險,而且還能夠記錄功能onetwo完成並通過R CMD check

+0

謝謝。我曾嘗試製作簡單地調用'general'的導出函數包裝器,但後來我失去了被調用的原始函數的信息。在'general'裏面我使用'match.call()[1]'來知道最初調用了哪個函數,但是如果我使用包裝器,它將不起作用。我知道這似乎令人困惑和不理想,但我真的認爲這是我的應用程序的最好和最簡單的方法。我希望你不會說「不會有辦法」,那是我最大的恐懼:) – 2015-04-04 21:00:20

+1

@daattali請參閱我的編輯進一步的建議。 – Thomas 2015-04-04 21:15:32

相關問題