2013-03-29 65 views
0

在一個使用R的長期項目中,我有一組約50個函數,我定義了我一直使用的函數和另外10或15個函數等一下。這些大部分都不是我直接使用的功能;他們是我用來直接定義我使用的幫助函數。當我從R數據文件加載數據對象時,我並不總是記得我命名的對象,所以我執行ls()來查看我加載的內容。但是,如果我已經加載了我的源代碼文件,那麼我必須通過可視化的方式篩選輸出以精確處理數據對象,這顯然很不方便。簡單的方法來列出我的數據,但不是我的函數在R? (隱藏函數ls()?)

所以我把函數包裝到一個R包中。如果我只是加載包,那麼一切都很好。我可以使用這些功能,但ls()只顯示數據對象。

但是,我不斷添加新的功能。而且我發現重新制作軟件包並不是一件簡單的事情,所以最終我總是從源文件中加載函數 - 直到我重新開始製作軟件包。

我當然可以比我更自動地執行包構建過程,或者將我的新功能拆分爲單獨的源文件。我也可以將這些功能分成不同的包 - 也許這會有所幫助。我想我只能通過閉包直接調用幫助函數 - 我沒有嘗試過 - 但是如果我想這樣做,我不能直接使用幫助程序,而且看起來像如果有一種更簡單的方法,那就是過度殺傷力。這就是我想知道的:是否有一個簡單的技巧,我錯過了 - 一種使功能可供使用的方式,但可以很容易地告訴我什麼數據對象,我沒有列出的功能。如果沒有,好的,但我認爲這值得提問。謝謝。

這些問題: hiding personal functions in rremove all variables except functions 提供非常有用的答案。什麼是完成上述內容的最簡單的方法?

+0

RStudio顯示以數據,值和函數組織的工作空間。如果你還沒有這樣做,你應該試試看。使用IDE還有許多其他好處。 – Roland

+0

我在猜測,既然你不認爲'重新制作'這個軟件包是微不足道的,你沒有使用devtools軟件包。它使得修改軟件包,測試它們並重新安裝軟件包變得非常簡單。 – Dason

+0

即使沒有devtools,「重製」一個包也不難。 –

回答

3

將函數放在包結構文件夾(即在名爲R的子文件夾中)並使用package:devtools。當您編輯您的R代碼時,您需要做的唯一事情是load_all("myfuncs")。一切都重新加載到R,不會弄亂你的ls()列表,並且如果需要進一步處理,很容易打包和記錄。但它不是強制性的。編輯後只需load_all

+0

這太棒了!完善。謝謝@Spacedman立即將我送到最短捷徑。 – Mars

+0

我還添加了一個建議的編輯:一個描述文件是需要使這項工作。 – Mars

6

lsf.str返回名稱空間中函數的向量,因此您可以使用它從ls的輸出中刪除這些名稱。

setdiff(ls(), lsf.str())