我在自己的包中使用data.table包,并在NAMESPACE和DESCRIPTION文件中导入data.table命名空间。在我的一个函数中,我使用 data.table 函数将数据帧转换为 data.table
dt <- data.table(df)
但是当我调用我的函数时,在调用 data.table(( 时,内存使用量会立即跳跃,R 会停止响应。当我逐行运行它并且内存消耗低时,函数中的代码工作正常。另外,如果我把库(数据表(放在我的函数中,一切都很好。我试图避免将库(data.table(放在我的函数中并声明依赖关系。但是,似乎出了点问题。我在 Mac OS X 10.6.8 上运行 R-2.14.0
任何人都可以解释一下可能是什么原因,以及我如何解决这个问题(在我的函数中不使用library(data.table((?
一些随机猜测,排名不分先后:
尝试仅使用"说明"中的"导入"或"依赖"字段。我认为您也不需要在命名空间中导入,但我可能是错的。为什么这会解释内存使用,不知道。
什么是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
,以便在从包中简单地import
data.table
时也运行它,修复与缺少data.table
选项相关的#1916。
但是,如果您使用的是 CRAN 的 1.8.0,并且正在导入(仅(而不是依赖,那么我希望您会收到有关缺少选项的错误,而不是内存消耗的跳跃。