我必须制作一个取决于包data.table的R包.但是,如果我要执行一个功能,例如包中的下一个功能
randomdt <- function(){
dt <- data.table(random = rnorm(10))
dt[dt$random > 0]
}
Run Code Online (Sandbox Code Playgroud)
函数[将使用data.frame的方法而不是data.table,因此错误
Error in `[.data.frame`(x, i) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)
会出现.通常这可以通过使用get('[.data.table')或类似的方法(package::function最简单)解决,但似乎不起作用.毕竟,[是一个原始的功能,我不知道它的方法是如何工作的.
那么,如何[从我的包中调用data.table 函数呢?
根据MichaelChirico的一些反馈以及Arun和Soheil的评论进行了更新.
粗略地说,您可以考虑两种方法.第一种是在你的包本身中构建依赖,而第二种是在你的R代码中包含测试存在的行data.table(如果没有找到,甚至可能自动安装它).
该data.table FAQ 6.9专门针对这一点,并指出,你可以确保data.table你的包被适当地加载方式:
要么i)在DESCRIPTION文件的Depends:字段中包含data.table,要么ii)在DESCRIPTION文件的Imports:字段中包含data.table并在NAMESPACE文件中包含import(data.table).
正如评论中所指出的,这是许多包中常见的R行为.
另一种方法是创建特定的代码行,以测试并导入所需的包作为代码的一部分.考虑到使用上面提供的选项的优雅,我认为这不是理想的解决方案.但是,这在技术上是可行的.
执行此操作的一种简单方法是使用require或library检查是否存在data.table,如果无法附加错误则抛出错误.您甚至可以使用一组简单的条件语句来运行,install.packages以便在加载它们时失败.
谢毅辉(knitr fame)有一篇很好的帖子讲述了这里library和require 这里之间的区别,并且只是library在包装对于即将推出的代码绝对必要的情况下使用的强有力的案例.
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |