Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 大合并/内存管理_R_Memory Management_Merge_Data.table - Fatal编程技术网

R 大合并/内存管理

R 大合并/内存管理,r,memory-management,merge,data.table,R,Memory Management,Merge,Data.table,我在尝试合并一个大文件和一个小文件时遇到了麻烦。我有其他关于R中内存管理的帖子,但还没有找到一种非极端(go 64位、上传到集群等)的解决方法。我尝试过使用bigmemory软件包,但没有找到解决方案。在我沮丧地举手之前,我想我应该试试这里 我正在运行的代码如下所示: #rm(list=ls()) localtempdir<- "F:/Temp/" memory.limit(size=4095) [1] 4095 memory.size(max=TRUE) [1] 487.56 g

我在尝试合并一个大文件和一个小文件时遇到了麻烦。我有其他关于R中内存管理的帖子,但还没有找到一种非极端(go 64位、上传到集群等)的解决方法。我尝试过使用bigmemory软件包,但没有找到解决方案。在我沮丧地举手之前,我想我应该试试这里

我正在运行的代码如下所示:

#rm(list=ls())
localtempdir<- "F:/Temp/"
memory.limit(size=4095)
[1] 4095
    memory.size(max=TRUE)
[1] 487.56
gc()
         used (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 170485  4.6     350000   9.4   350000   9.4
Vcells 102975  0.8   52633376 401.6 62529185 477.1

client_daily<-read.csv(paste(localtempdir,"client_daily.csv",sep=""),header=TRUE)
object.size(client_daily)
>130MB

sbp_demos<-read.csv(paste(localtempdir,"sbp_demos",sep=""))
object.size(demos)
>0.16MB
client_daily<-merge(client_daily,sbp_demos,by.x="OBID",by.y="OBID",all.x=TRUE)
Error: cannot allocate vector of size 5.0 MB
#rm(list=ls())

localtempdir正如Chase已经提到的那样,您可以尝试,也可以尝试

无论是哪一种,如果您适当地设置索引,您都可能从中获得更多的乐趣

使用data.table,您将:

dt1 <- data.table(sbp_demos, key='OBID')
dt2 <- data.table(client_daily, key='OBID')

## Do an INNER JOIN-like operation, where non-matching rows are removed
mi <- dt1[dt2, nomatch=0]

## Do a RIGHT JOIN(?)-like operation ... all rows in dt2 will be returned.
## If there is no matching row in dt1, the values in the dt1 columns for
## the merged row will be NA
mr <- dt1[dt2]

dt1您看过
data.table
package了吗?对于大型合并来说,它速度很快,而且巧合的是,启动时可能会更节省内存?这可能不会解决您的问题,但下面是一些您可以尝试的方法。如果两个数据集中都有不需要的列:在中读取数据后将其删除,执行gc(),然后重试合并。另一个想法是,如果可能的话,将数据转换成矩阵,因为它们往往占用更少的内存。