在R中将一组数组文件组合成一个大数组



我想合并一组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)
}

相关内容

  • 没有找到相关文章

最新更新