2012-12-22 29 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