从R包中导出环境

6
我正在开发一个R包,它封装了rmongodb包并创建了一个开发者友好的接口,用于与MongoDB一起工作。该包在内部使用proto。
我想通过名为MongoDB的proto对象(一个环境)导出单个工厂方法,其定义如下:
MongoDB <- proto(
  new = function(., ...) {
    # Good stuff in here...
  }
)

在使用RStudio和devtools进行开发以及本地测试时,这似乎不是一个问题。然而,我遇到了几个问题:
- devtools::check() 坚持要在我的NAMESPACE文件中放置一个import(MongoDB),这会导致R CMD check失败并显示“Namespace dependency not required: 'MongoDB'”。 - 当我删除此导入指令时,即使我手动添加export(MongoDB),R CMD check在运行我的testthat测试时也会失败,并显示“object 'MongoDB' not found”。但是,在RStudio中,devtools::test()可以正常工作。
从R包中导出环境(proto对象)的推荐方法是什么?
更新:
根据 Gabor 的建议,我确保 MongoDB.RdMongoDB 声明为数据(链接来源)。但在测试中仍然出现了 MongoDB 不可见的失败(测试使用 testthat)。我的 DESCRIPTION 文件位于 此处NAMESPACE 位于 此处

您可能还想查看RMongo包,它使用Java驱动程序,并且具有比rmongodb包更高级的接口。 - Stennie
2个回答

3
尝试这样做:
  1. 在您的NAMESPACE文件中指定export("MongoDB"),以使MongoDB proto对象公开可用。
  2. 在您的DESCRIPTION文件中指定LazyData: yes,以便在访问时自动加载。
  3. 添加一个.Rd文件,将其记录为数据集。
然后它应该通过R CMD check

感谢你的建议,Gabor。我仍然因为同样的原因在check时失败了:在加载测试时找不到MongoDB。我已经更新了问题,并附上了Rd文件、DESCRIPTIONNAMESPACE的链接。 - Sim
@Sim,我已经使用我提到的3个点创建了软件包,它们都能正常运行,所以这很可能是你正在使用的开发环境出现了问题,而不是R本身出现了问题。你可能需要联系那些工具的维护者解决这个问题。 - G. Grothendieck
只是为了确保我理解正确:由于问题出现在测试中,您是否建议我与@hadley提出问题,并查看它是否与testthat(测试所在的位置)或devtools(在NAMESPACE中发出潜在错误指令)有关? - Sim

1

这个指令:

import(MongoDB)

这意味着你将MongoDB命名空间导入到你的包中。如果我理解正确,这可能不是你想要的。

我认为你想要导出MongoDB对象,然后...

export(MongoDB) 

应该可以正常工作。


没错。import语句是由devtools插入的,这不太好。唉,export(MongoDB)不起作用。 - Sim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接