我正在try 使用这些数据.我自己的包裹里有一个桌子Package.MWE如下:

我创建了一个函数,test.有趣的是,这只是创建了一个小数据.表对象,然后按"A"列对"Val"列分组求和.代码是

test.fun<-function ()
{
    library(data.table)
    testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
    setkey(testdata, A)
    res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
    return(res)
}

当我在常规R会话中创建此函数,然后运行该函数时,它会按预期工作.

> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
> res
     A Ct      Total        Avg
[1,] 1  5 -0.5326444 -0.1065289
[2,] 2  5 -4.0832062 -0.8166412
[3,] 3  5  0.9458251  0.1891650
[4,] 4  5  2.0474791  0.4094958
[5,] 5  5  2.3609443  0.4721889

当我把这个函数放到一个包中,安装这个包,加载这个包,然后运行这个函数时,我会收到一条错误消息.

> library(testpackage)
> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found

有人能解释一下为什么会发生这种情况,以及我能做些什么来解决它吗.非常感谢您的帮助.

推荐答案

安德烈的猜测是对的,+1.这里有一个常见问题解答(见vignette("datatable-faq")),还有一个关于导入data.table的新vignette:

FAQ 6.9: I have created a package that depends on data.table. How do I ensure my package is data.table-aware so that inheritance from data.frame works?

i)在描述文件的Depends:字段中包含data.table,或ii)在描述文件的Imports:字段中包含data.table,在名称空间文件中包含import(data.table).

进一步的背景...在[.data.table个函数(以及其他data.table个函数)的顶部,您将看到一个switch ,具体取决于对cedta()的调用结果.这表示调用环境数据表感知.输入data.table:::cedta可以显示它是如何完成的.它依赖于具有名称空间的调用包,并且该名称空间导入或依赖于data.table.这就是data.table如何被传递给非data.table-aware包(比如base中的函数)的方式,这些包可以在data.table上使用绝对标准的[.data.frame语法,幸好data.frame is() a data.table也不知道.

这也是为什么data.table继承以前不与无名称空间的包兼容,以及为什么在用户请求时,我们必须要求此类包的作者向他们的包添加名称空间以兼容.幸运的是,现在R为缺少一个名称空间的包(来自v2.14.0)添加了一个默认名称空间,这个问题已经消失了:

R版本2.14.0的变化

R相关问答推荐

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

如何将y轴上的线定位得彼此更近

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

为什么在ggplot2中添加geom_text这么慢?

计算具有奇数日期的运行金额

R s iml包如何处理语法上无效的因子级别?'

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

将文件保存到新文件夹时,切换r设置以不必创建目录

在RStudio中堆叠条形图和折线图

有效识别长载体中的高/低命中

在R中,如何将误差条放置在堆叠的每个条上?

使用R将简单的JSON解析为嵌套框架

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

R -基线图-图形周围的阴影区域

循环遍历多个变量,并将每个变量插入函数R

删除在R中的write.table()函数期间创建的附加行

如何从嵌套数据中自动创建命名对象?在R中

具有自定义仓位限制和计数的GGPLATE直方图

有没有办法将勾选/审查标记添加到R中的累积关联图中?

如果极点中存在部分匹配,则替换整个字符串