【发布时间】:2016-03-14 11:47:38
【问题描述】:
我有一个大型数据集,我正在 R 中阅读
我想在其上应用Unique() 函数,以便更好地使用它,但是当我尝试这样做时,我收到了提示:
clients <- unique(clients)
Error: cannot allocate vector of size 27.9 Mb
所以我试图通过这样做来部分应用这个功能:
clientsmd<-data.frame()
n<-7316738 #Amount of observations in the dataset
t<-0
for(i in 1:200){
clientsm<-clients[1+(t*round((n/200))):(t+1)*round((n/200)),]
clientsm<-unique(clientsm)
clientsmd<-rbind(clientsm)
t<-(t+1) }
但我明白了:
Error in `[.default`(xj, i) : subscript too large for 32-bit R
有人告诉我,我可以使用诸如“ff”或“bigmemory”(或任何其他)之类的软件包更轻松地做到这一点,但我不知道如何将它们用于此目的。
无论是告诉我为什么我的代码不起作用,还是告诉我如何利用这些软件包,我都会感谢任何形式的指导。
【问题讨论】:
-
如果
clients是您的整个数据框,我想它有一个带有唯一标识符的列。假设此列名为id。可能值得尝试看看unique(clients$id)或者最好是duplicated(clients$id)是否有效。这也使您能够对clients进行子集化以获取所有重复项,然后您可以进一步检查包括其他列。 -
你有多少内存,
data.frame的大小是多少?如果您有 32 位或 64 位操作系统,这一点也很重要。您的问题看起来像简单的内存问题,有时调用gc()函数会有所帮助,或者关闭 R 并重新启动它,您可以尝试通过关闭其他正在运行的应用程序来释放系统中的更多 RAM。并且不要害怕熟悉ff和ffbase包,您可以将data.frame转换为ffdf像这样clients_ffdf <- as.ffdf(clients)然后几乎像往常一样使用它data.frame
标签: r