我想合并一组100个独立的数组文件,dim=({x=684,y=483,t=3} (t=time)),成一个大数组dim=(x=684,y=483,t=3,runs=100)。
我以循环形式运行了一个严重的(100)模拟。为了区分我所做的每个模拟:
run.number<-as.integer(runif(1)*10^5) # sets a random number with a small likelihood of repeating itself within the 100 runs
hP=paste0(run.number,".P_dynamics",”.RData”)# file name
save(historyP,file=hP) # save array with name = “hP”
保存文件的示例:5468.P_dynamics。RData 和 61952. p_dynamics.rdata *
问题:我有100个像上面那样独立的数组文件,我想把它们分组到一个数组中,如:
dynamics<-array(NA,c(x=684,y=483,t=3,runs=100))
我该怎么做?考虑到生成的数字"运行"。"Number"是一个大随机数。此外,运行的顺序也非常重要。因此,旧文件必须出现在新数组之前。
abind::abind()
组合多维数组,很容易。难点在于abind()
的论证准备。
(1)移动所有xxx.RData
到一个文件夹
(2)获取文件名,将其更改为新旧顺序,并获取数组的对象名称。
library(dplyr); library(abind)
fl <- list.files("FolderName", full = T)
fl <- fl[order(file.info(fl)$ctime)]
array_names <- sapply(fl, load) %>% as.vector()
- 当所有
array
具有唯一的名称时;
(3)加载所有xxx。RData,用lapply()
制作数组列表,用abind::abind(list, rev.along = 0)
组合
for(i in fl) load(i)
ar <- lapply(array_names, function(x) eval(parse(text = x))) %>%
abind(rev.along = 0)
- 当
array
具有共同名称时(即length(unique(array_names))
是1
);
(3)将attach()
单独放入list()
uni_n <- unique(array_names)
array_list <- list()
for(i in 1:length(fl)) {
attach(fl[i])
array_list[[i]] <- eval(parse(text = uni_n))
detach()
}
ar <- abind(array_list, rev.along = 0)
1)创建一个包含所有"R.data"文件的列表它们是订购的,所以这不是问题
res=list.files('.')
indexP=grep(pattern="P_dynamics.RData",res) #location of P dynamics files
resP=res[indexP] #P dynamics files list
2)构造p动态全局数组
load(paste0(resP[1]))
Pdynamics=historyP
for (i in resP[-1])
{
load(i)
Pdynamics=abind(Pdynamics,historyP,along=4)
}