Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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_Merge - Fatal编程技术网

R 合并多个大型数据集-内存问题

R 合并多个大型数据集-内存问题,r,merge,R,Merge,我在R中有大约15个不同的数据集,需要合并成一个大数据集 将它们结合起来将创建一个包含约1120个变量和约1500个观测值的数据集 合并前5个数据集(大约700个变量)没有问题,但在尝试合并第6/7个数据集时,R要么卡住,要么出现错误消息: 错误:无法分配大小为10.7 Mb的向量 我尝试了不同的方法来编写此代码(函数/循环),但这是最简单的方法,通过这种方法,我了解到它会被卡在第6个数据集上: #Merging the first two data sets #bindedDataNames

我在R中有大约15个不同的数据集,需要合并成一个大数据集

将它们结合起来将创建一个包含约1120个变量和约1500个观测值的数据集

合并前5个数据集(大约700个变量)没有问题,但在尝试合并第6/7个数据集时,R要么卡住,要么出现错误消息:

错误:无法分配大小为10.7 Mb的向量

我尝试了不同的方法来编写此代码(函数/循环),但这是最简单的方法,通过这种方法,我了解到它会被卡在第6个数据集上:

#Merging the first two data sets
#bindedDataNames is a chr vector with the names of all the datasets that need            
#to be merged. 
Age11_twins_22022017 <- merge(eval(parse(text = bindedDataNames[1]))
                          [,-c(1:2)],
                          eval(parse(text = bindedDataNames[2]))
                          [,-c(1:3)],
                          by=c("ifam","ID"))

#Loop to merge all datasets. With print I saw it goes without a problem until         
#the 6th dataset
for (cnt2 in 3:17) {
  print(cnt2)
  Age11_twins_22022017 <- merge(Age11_twins_22022017,
                            eval(parse(text = bindedDataNames[cnt2]))
                            [,-c(1:3)],
                            by=c("ifam","ID"))
}
#合并前两个数据集
#bindedDataNames是一个chr向量,其中包含所需的所有数据集的名称
#合并。

这绝对不是一个大数据集。要么你在一台可供R使用的内存非常少的计算机上工作,要么你的代码效率很低/有漏洞。请先共享您的代码。我曾尝试在两台不同的计算机上运行此代码,但都无法运行。我现在已经在上一篇文章中添加了我尝试编写的最简单版本的代码。非常感谢。为什么需要
eval(parse(text=)
?你确定通过合并只得到大约1500个观测值吗?在它失败之前已经有多少行了?或者你的意思是
cbind
而不是
merge
?我在R中有18个不同的对象,每个对象都是一个数据帧。为了在循环中访问它们,我有一个带有名称的chr向量,
eval(parse(text=)
从chr向量中获取名称并将其转换为一个对象。如果我从所有对象中创建一个列表,并通过该列表访问它们,这能有所帮助吗?我的意思是进行
merge
(而不是
cbind
),因为每个数据帧都有不同的参与者信息,按标识符进行合并很重要。