我有两个数据框:
name type length size value
x data.frame 2 152.6MB 20,000,263 obs of 2 variables
y data.frame 26 2.2GB 20,000,263 obs of 26 variables
做的时候
x <- merge(x,y, by="common variable")
我收到以下错误:
rsession(25305,0x7fff7c8e9300) malloc: *** mach_vm_map(size=1600042080280576) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
rsession(25305,0x7fff7c8e9300) malloc: *** mach_vm_map(size=1600042080280576) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Error: cannot allocate vector of size 1490155.3 Gb
我无法想到为什么R试图分配1,490,155.3Gb的空间......
任何人都可能对此有所了解吗?
答案 0 :(得分:1)
我猜测这样做的方法是在a
和b
中存储匹配变量的所有组合,然后选择匹配变量的组合。它确实需要大量内存。这一行(来自merge.data.frame
)看起来就像这样:
ij <- expand.grid(seq_len(nx), seq_len(ny))
其中nx
和ny
是数据框的行数。所以这里尝试创建大小为20,000,000到20,000,000 x 2的元素,这可能会达到所需的Gb RAM数量。