2012-12-22 30 views
6

我正在開發一個R包,它包裝了rmongodb包,並創建了一個用於使用MongoDB的開發人員友好界面。該軟件包內部使用proto從R包導出環境

我想通過一個原對象(的環境)稱爲MongoDB,其定義導出一個工廠的方法是:

MongoDB <- proto(
    new = function(., ...) { 
    # Good stuff in here... 
    } 
) 

在與RStudio & devtools,並在本地測試開發這似乎並不成爲一個問題。但是,我遇到了幾個問題:

  • devtools::check()堅持把一個import(MongoDB)在我的空間文件,這使得R CMD check失敗,「不需要命名空間的依賴:‘MongoDB的’」。

  • 當我刪除此導入指令,R CMD check失敗,「對象‘的MongoDB’未找到」,而運行我testthat測試,即使我手動添加export(MongoDB)。但是,devtools::test()在RStudio中正常工作。

從R軟件包中導出proto環境對象的建議方法是什麼?

更新:

每下面的Gabor的建議下,我確信,MongoDB.Rd聲明MongoDB數據(鏈接有源)。在測試中(testthat),我仍然無法看到MongoDB。我的DESCRIPTION文件是hereNAMESPACEhere

+0

你可能想看看['RMongo'](http:// cran。r-project.org/web/packages/RMongo/index.html)軟件包。它使用Java驅動程序,並具有比'rmongodb'軟件包更高級別的界面。 – Stennie

回答

3

試試這個:

  1. NAMESPACE文件,使MongoDB原對象公開可用的指定export("MongoDB")
  2. 在您的DESCRIPTION文件中指定LazyData: yes,以便它在訪問時自動加載。
  3. 添加一個.Rd文件將其記錄爲數據集。

然後它應該通過R CMD check

+0

感謝您的建議,Gabor。由於相同的原因,我仍然沒有通過'check'檢查:加載測試時找不到'MongoDB'。我已經通過鏈接到'Rd'文件,'DESCRIPTION'和'NAMESPACE'更新了這個問題。 – Sim

+0

@Sim,我用我提到的3點創建了軟件包,他們工作,所以這可能是您使用的開發環境而不是R的問題。您可能需要與這些工具的維護人員一起處理它。 –

+0

爲了確保我明白了:因爲問題與測試一起出現,您是否建議我使用@hadley提出問題並查看它是關於'testthat'(測試的地方)還是'devtools'(它會發射'NAMESPACE'中可能有錯誤的指令)? – Sim

1

該指令:

import(MongoDB) 

意味着你導入MongoDB命名空間到你的包。如果我理解正確,可能不是你想要的。

我想你要導出的MongoDB對象,然後

export(MongoDB) 

應該正常工作。

+0

對。 'import'語句被'devtools'插入,這不是很酷。唉,'export(MongoDB)'不起作用。 – Sim