attr(*,“internal.selfref”)= <externalptr>出现在data.table Rstudio中

时间:2015-10-20 15:56:58

标签: r data.table rstudio

我是R data.table软件包的新用户,我注意到我的data.tables中有一些不寻常的内容,我在文档或本网站的其他地方没有找到解释。

在Rstudio中使用data.table package并在'Environment'面板中查看特定的data.table时,我看到data.table结尾处出现以下字符串

  

ATTR(*, “internal.selref”)=&LT; externalptr&GT;

如果我在控制台中打印相同的data.table,则不会显示此字符串。

这是一个错误,还是data.table(或Rstudio)的固有功能?我是否应该关注这是否会影响下游流程如何处理这些数据?

我正在运行的版本如下:
data.table版本1.9.6 Rstudio版本0.99.447 OSX 10.10.5

如果这只是我一个无知的新手,请提前道歉。

2 个答案:

答案 0 :(得分:4)

我实际上已经问过data.table包的主要作者Matt Dowle,这个问题就在不久前。

  

这是一个错误,还是data.table(或Rstudio)的固有特性?

显然这个属性是由data.table在内部使用的,它不是RStudio中的一个错误,实际上RStudio正在显示对象的属性。

  

我是否应该关注这是否影响下游流程如何处理这些数据?

不,这不会影响任何事情。

答案 1 :(得分:1)

对于那些对创建此属性的原因感到好奇的人,我相信它在setkey()部分的data.table manual中进行了解释:

  

在v1.7.8中,不推荐使用密钥&lt; - 语法。 &lt; - 方法复制整个表,我们知道   如果没有R本身的变化,就无法避免该副本。请改用set *函数   根本不做任何复制。为方便起见,setkey接受不带引号的列名,而setkeyv   接受一个列名矢量。   使用按键复制&#;(除了较慢)之外的问题(对于data.table)是R没有   保持过度分配的真实长度,但它看起来好像有。通过引用添加列   使用:=在一个键之后&lt; - 因此是一个内存覆盖并最终是一个段错误;该   在关键的&lt; - 副本之后,分配的内存并不存在。 data.tables现在有一个属性   .internal.selfref捕获并警告这些副本。此属性已在。中实现   一种与same()和object.size()友好的方式。   出于同样的原因,请使用通过引用修改对象的其他set *函数   而不是使用&lt; - 运算符导致复制整个对象。