我是R data.table
软件包的新用户,我注意到我的data.tables中有一些不寻常的内容,我在文档或本网站的其他地方没有找到解释。
在Rstudio中使用data.table package
并在'Environment'面板中查看特定的data.table时,我看到data.table结尾处出现以下字符串
ATTR(*, “internal.selref”)=< externalptr>
如果我在控制台中打印相同的data.table,则不会显示此字符串。
这是一个错误,还是data.table(或Rstudio)的固有功能?我是否应该关注这是否会影响下游流程如何处理这些数据?
我正在运行的版本如下:
data.table版本1.9.6
Rstudio版本0.99.447
OSX 10.10.5
如果这只是我一个无知的新手,请提前道歉。
答案 0 :(得分:4)
我实际上已经问过data.table包的主要作者Matt Dowle,这个问题就在不久前。
这是一个错误,还是data.table(或Rstudio)的固有特性?
显然这个属性是由data.table在内部使用的,它不是RStudio中的一个错误,实际上RStudio正在显示对象的属性。
我是否应该关注这是否影响下游流程如何处理这些数据?
不,这不会影响任何事情。
答案 1 :(得分:1)
对于那些对创建此属性的原因感到好奇的人,我相信它在setkey()部分的data.table manual中进行了解释:
在v1.7.8中,不推荐使用密钥< - 语法。 < - 方法复制整个表,我们知道 如果没有R本身的变化,就无法避免该副本。请改用set *函数 根本不做任何复制。为方便起见,setkey接受不带引号的列名,而setkeyv 接受一个列名矢量。 使用按键复制&#;(除了较慢)之外的问题(对于data.table)是R没有 保持过度分配的真实长度,但它看起来好像有。通过引用添加列 使用:=在一个键之后< - 因此是一个内存覆盖并最终是一个段错误;该 在关键的< - 副本之后,分配的内存并不存在。 data.tables现在有一个属性 .internal.selfref捕获并警告这些副本。此属性已在。中实现 一种与same()和object.size()友好的方式。 出于同样的原因,请使用通过引用修改对象的其他set *函数 而不是使用< - 运算符导致复制整个对象。