我在自己的包中使用data.table包,并在命名空间和描述文件中导入data.table命名空间。在我的一个函数中,我使用data.table函数将data.frame转换为data.table
dt <- data.table(df)
但是,当我调用我的函数时,在调用data.table()时,内存使用量立即跃升,而R只是停止响应。当我逐行运行并且内存消耗很低时,函数中的代码工作得很好。此外,如果我把库(data.table)放在我的函数中,一切都很好。我试图避免将库(data.table)放在函数中,而是声明依赖项。然而,似乎有什么问题是这样的。我在MacOSX10.6.8上运行R-2.14.0
有人能解释什么可能是原因吗?我如何解决这个问题(在我的函数中不使用库(data.table))?
发布于 2012-05-17 01:02:21
一些没有特定顺序的随机猜测:
尝试仅在描述中使用导入或依赖字段。我不认为您也需要导入名称空间,但我可能错了。为什么这会解释为什么内存的使用,但不知道。
df
是什么?它是大的,还是某种程度上的递归或奇怪的?如果可能的话,请提供str(df)
来告诉我们一些情况。
试试as.data.table(df)
,它比data.table(df)
快。但听起来你的问题和那不一样。
您的函数调用是否被反复调用?我可以理解为什么反复将df
转换为dt
会耗尽内存,但并不是为什么只调用library(data.table)
会使速度加快。
尝试使用R --vanilla
启动R,以确保在启动时没有加载.Rdata
(其中可能包括屏蔽data.table
的函数)。如果您已经开发了自己的包,那么某种函数名称冲突,或者search()
路径上的包顺序听起来是合理的。
否则我们需要更多的信息。我不记得有任何类似的事情发生在我身上,也没有被报道过。
那么,您使用的是哪个版本的data.table
?在上的v1.8.1中有这个bug修复(还没有在CRAN上):
data.table
安装代码从.onAttach
移动到.onLoad
,以便在简单地从包中import
编辑data.table
时也运行,修复#1916与缺少的data.table
选项有关。< code >f 223
但是,如果您使用的是CRAN的1.8.0,并且是导入(仅)而不是依赖,那么我希望您得到一个关于缺少选项的错误,而不是内存消耗的跳跃。
https://stackoverflow.com/questions/10628371
复制