dplyr中奇怪的内存使用使用粘贴进行变异

dplyr中奇怪的内存使用使用粘贴进行变异,r,dplyr,R,Dplyr,所以我的实际数据集是1600万行,而且是保密的,但我可以相当容易地说明发生了什么。我一点也不理解这种行为,它与我读过的所有东西都背道而驰,或者至少我认为它确实如此 这是一个带有字符串和日期的数据框(真实的数据框有更多的列和行) 我想制作第三列,将前两列粘贴在一起。我是这样做的: finalTest = test %>% mutate(c = paste(a, b)) 如果我这样做的话,有1600万行,它将从使用的2GB内存增加到近8GB,进程将被服务器(有8GB内存)终止 但是,如果

所以我的实际数据集是1600万行,而且是保密的,但我可以相当容易地说明发生了什么。我一点也不理解这种行为,它与我读过的所有东西都背道而驰,或者至少我认为它确实如此

这是一个带有字符串和日期的数据框(真实的数据框有更多的列和行)

我想制作第三列,将前两列粘贴在一起。我是这样做的:

finalTest = test %>%
  mutate(c = paste(a, b))
如果我这样做的话,有1600万行,它将从使用的2GB内存增加到近8GB,进程将被服务器(有8GB内存)终止

但是,如果我将数据集一分为二,粘贴列,然后rbind,就可以了,尽管这样做是在创建不必要的对象(整个数据集只有大约700MB,因此对象适合RAM是有意义的)

test1=test%>%
过滤器(行号()%
变异(c=粘贴(a,b))
test2=测试%>%
过滤器(行号()>楼层(n()/2))%>%
变异(c=粘贴(a,b))
finalTest2=rbind(test1,test2)
这很好。看起来这些对象适合内存,但当你对它们进行操作时就不适合了。但是发生了什么事情,内存如此密集


我一点也不明白。这是预期的行为吗?粘贴是唯一的吗?用字符串和日期粘贴?还有别的吗?

粘贴分配两次,因此对于较长的输入来说成本较高
finalTest = test %>%
  mutate(c = paste(a, b))
test1 = test %>%
  filter(row_number() <= floor(n()/2)) %>%
  mutate(c = paste(a, b))

test2 = test %>%
  filter(row_number() > floor(n()/2)) %>%
  mutate(c = paste(a, b))

finalTest2 = rbind(test1, test2)