我想将一组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”是一个大的随机数。此外,运行顺序非常重要。因此,较旧的文件必须在较新的数组之前。
答案 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)
}