【问题标题】:Group a set of array files into ONE large array in R将一组数组文件分组到 R 中的一个大数组中
【发布时间】:2016-10-30 10:27:04
【问题描述】:

我想将一组 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.RData61952.P_dynamics.RData*

问题: 我有 100 个像上面这样的独立数组文件,我想将它们组合成一个数组,如:

dynamics<-array(NA,c(x=684,y=483,t=3,runs=100))

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

【问题讨论】:

  • historyP是原始数组保存的文件名是:("a random number"+".P_dynamics"+".RData")
  • 加载数据时,文件名为“Pdynamics.RData”

标签: arrays r multidimensional-array


【解决方案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)


  • arrays 有一个通用名称时(即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)

【讨论】:

  • 非常感谢它完美运行我也设法开发了一种类似的方式,它也很有效,但非常感谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多