将一组数组文件分组为R中的一个大型数组

时间:2016-10-30 10:27:04

标签: arrays r multidimensional-array

我想将一组100个独立的数组文件 dim =({x = 684,y = 483,t = 3}(t = time))合并为一个大数组 dim =(x = 684,y = 483,t = 3,运行= 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))

我该怎么做?考虑到生成的数字“run.number”是一个大的随机数。此外,运行顺序非常重要。因此,较旧的文件必须在较新的数组之前。

2 个答案:

答案 0 :(得分:1)

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 :(得分:1)

1)创建一个包含所有&#34; R.data&#34;的列表。档 它们是有序的,所以这不是问题

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)
}