R:导入data.table包命名空间,无法解释的内存消耗跳跃

时间:2012-05-17 00:10:57

标签: r memory namespaces data.table

我在自己的包中使用data.table包,并在NAMESPACE和DESCRIPTION文件中导入data.table命名空间。 在我的一个函数中,我使用data.table函数将data.frame转换为data.table

dt <- data.table(df)

但是当我调用我的函数时,在调用data.table()时,内存使用会立即跳转而R只会停止响应。 当我逐行运行并且内存消耗低时,函数中的代码工作正常。 另外,如果我把库(data.table)放在我的函数中,一切都很好。我试图避免将库(data.table)放在我的函数中,而是声明依赖。但是,这似乎出现了问题。我在Mac OS X 10.6.8上运行R-2.14.0

任何人都可以解释可能是什么原因,我该如何解决这个问题(在我的函数中不使用库(data.table))?

1 个答案:

答案 0 :(得分:3)

一些随机猜测没有特别的顺序:

尝试仅使用DESCRIPTION中的Imports或Depends字段。我不认为你也需要在NAMESPACE中导入,但我可能错了。为什么这会解释内存的使用,但不知道。

什么是df?它在某种程度上是大的还是以某种方式递归或奇怪的?如果可能的话,请提供str(df)告诉我们一些事情。

尝试比as.data.table(df)更快的data.table(df)。但听起来你的问题与此不同。

您的函数调用是否被重复调用?我可以看到为什么反复将df转换为dt会耗尽内存,但不是为什么只调用library(data.table)会使速度快。

尝试使用R --vanilla启动R,以确保在启动时加载.Rdata(可能包括屏蔽data.table的函数)等等。如果您已经开发了自己的软件包,那么某种函数名称会发生​​冲突,或者search()路径上的软件包顺序听起来似乎是合理的。

否则我们需要更多信息。我不记得有什么事情发生在我身上,或者之前被报道过。

并且,您使用的是data.table的哪个版本?在R-Forge上的v1.8.1中存在此错误修复(尚未在CRAN上):

  
      
  • data.table设置代码从.onAttach移至.onLoad,以便在data.table只是import从包中修改时运行,修复# 1916年与缺少data.table选项有关。
  •   

但是如果你使用的是CRAN的1.8.0,而且只是导入(仅限)而不是依赖,那么我希望你得到一个关于缺少选项的错误,而不是内存消耗的跳跃。