Нужно прочитать несколько файлов .h5 используя цикл с индексами - PullRequest
0 голосов
/ 21 ноября 2019

Мне дали кучу файлов, которые мне нужно перечитать и построить график. Некоторые из наборов данных имеют больше файлов, чем другие. Поэтому мне нужно написать цикл, который будет делать это. Код, который я написал до сих пор, работает, но я не могу понять, как индексировать цикл для вызова файлов. Я попробовал простую

i <-0 
for (i in files){
i <- i + 1
file_[i] <-H5fopen(files[i])
 }

Я пробовал другие версии, но я так сильно изменил их, что не помню. Но когда я загружаю файлы индивидуально внизу. Они загружаются, так что я знаю, что все, прежде чем область, где необходим цикл, работает.


library(data.table)
library(zoo)
library(Rtools)
library(tidyr)
library( dplyr)
library(scales)
library(readr)
library(tools)
library(plotly)
library(rootSolve)
library(stringr)
library(rhdf5)

library( ggplot2)
library(tokenizers)
library(readr)
library(tools)

library(stringr)
library(h5)
options(max.print=10000)
options(digits = 5, scipen = -2)



askUser_file_x <-0
while(askUser_file_x != "none"){

  askUser_file_x <- readline(prompt="Please, type on DS you wish to analyze, else type none (format DS##):   ")


  x <- str_extract(askUser_file_x, "(?<=DS)[0-9]+")
  x <-as.numeric(x) 
if (x==23){
  setwd("/H5files/08/14/")

  }else if  (x>=24 & x<=26){
    setwd("C:/H5files/08/15/")

  }else if  (x>=27 & x<=30){  
    setwd("C:s/H5files/08/21/")
  }else if  (x>=31 & x<=36){  
    setwd("C:/H5files/08/20/")

  }else if  (x>=01 & x<=06){
    setwd("C:/H5files/08/21/")
  }else if  (x>=37 & x<=44){
    setwd("C:/H5files/08/21/")
  }else if  (x>=07 & x<=18){
    setwd("C:/H5files/08/26/")
  }else if  (x>=19 & x<=22){
    setwd("C:/H5files/08/27/")
  }else if  (x>=45 & x<=46){
    setwd("C:/H5files/08/28/")
  }else if  (x>=47 & x<=50){
    setwd("C:/H5files/08/29/")

  }else
    print( "Data Set does not exist")



switch(askUser_file_x,
       DS01= (file <-paste0("TIVA_000",c(282:286))),
       DS03= (file <-paste0("TIVA_000",c(266:271))),
       DS04= (file <-paste0("TIVA_000",c(272:276))),
       DS05= (file <-paste0("TIVA_000",c(277:281))),
       DS06= (file <-paste0("TIVA_000",c(290:294))),
       DS07= (file <-paste0("TIVA_000",c(316:320))),
       DS08 =(file <-paste0("TIVA_000",c(321:325))),
       DS09 =(file <-paste0("TIVA_000",c(326:330))),
       DS10 =(file <-paste0("TIVA_000",c(331:335))),
       DS11 =(file <-paste0("TIVA_000",c(295:300))),
       DS12 =(file <-paste0("TIVA_000",c(301:305))),
       DS13 =(file <-paste0("TIVA_000",c(306:310))),
       DS14 =(file <-paste0("TIVA_000",c(311:315))),
       DS15 =(file <-paste0("TIVA_000",c(336:340))),
       DS16 =(file <-paste0("TIVA_000",c(341:345))),
       DS17 =(file <-paste0("TIVA_000",c(346:350))),
       DS18 =(file <-paste0("TIVA_000",c(351:355))),
       DS19 =(file <-paste0("TIVA_000",c(356:360))),
       DS20 =(file <-paste0("TIVA_000",c(361:365))),
       DS21 =(file <-paste0("TIVA_000",c(366:370))),
       DS22 =(file <-paste0("TIVA_000",c(371:375))),
       DS23 =(file <-paste0("TIVA_000",c(100:115))),
       DS24 =(file <-paste0("TIVA_000",c(116:121))),
       DS25a =(file<-paste0("TIVA_000",c(121:125))),
       DS25b =(file<-paste0("TIVA_000",c(126:130))),
       DS26 =(file<-paste0("TIVA_000",c(131:133))),
       DS27 =(file<-paste0("TIVA_000",c(161:163))),
       DS28a =(file<-paste0("TIVA_000",c(146:150))),
       DS28b =(file<-paste0("TIVA_000",c(156:160))),
       DS29 =(file<-paste0("TIVA_000",c(151:155))),
       DS30 =(file<-paste0("TIVA_000",c(156:160))),
       DS31 =(file<-paste0("TIVA_000",c(164:170))),
       DS32 =(file<-paste0("TIVA_000",c(171:175))),
       DS33 =(file<-paste0("TIVA_000",c(175:180))),
       DS34 =(file<-paste0("TIVA_000",c(181:188))),
       DS35 =(file<-paste0("TIVA_000",c(189:193))),
       DS36 =(file<-paste0("TIVA_000",c(194:198))),
       DS37 =(file<-paste0("TIVA_000",c(199:198))),
       DS38 =(file<-paste0("TIVA_000",c(211:220))),
       DS39a =(file<-paste0("TIVA_000",c(221:230))),
       DS39b =(file<-paste0("TIVA_000",c(231:240))),
       DS40 =(file<-paste0("TIVA_000",c(241:243))),
       DS41 =(file<-paste0("TIVA_000",c(244:245))),
       DS42a =(file<-paste0("TIVA_000",c(246:249))),
       DS43a =(file<-paste0("TIVA_000",c(250:252))),
       DS44 =(file<-paste0("TIVA_000",c(253:255)))

       )

    files <-paste0(file, ".h5")



 ## this is the part I need to loop some DS's have 3-5 files one has eleven

       file_1<- H5Fopen(files[1])  

       file_2<- H5Fopen(files[2])  

       file_3<- H5Fopen(files[3])

       file_4<- H5Fopen(files[4])

      file_5<- H5Fopen(files[5])

      h5ls(file_1)

``````
Edited for clarity

If I choose say DS23 then files becomes [1:6] TIVA_000116.h5 , TIVA_000117.h5, ... 
which is what I want, and if I run ``` file_1<- H5Fopen(files[1])``` it opens the files the way I expect it too. Is there a way  loop over files 
and create something like this 
````
file_1 <- H5Fopen(files[1])  # where file_1 take its name from  i = 1 and  
                             #H5Fopen(files[1]) is selected from the 1 element in the files vector
````
I want it to be able to select them because I have 45 Data sets of 5 files each that have to be created and converted. So I am trying to automate as much as possible. 
THanks in advance

1 Ответ

0 голосов
/ 03 декабря 2019

Это был специальный код, который отвечал моим потребностям в чем-то, что открывало бы все файлы из корпуса коммутатора независимо от того, сколько их было.

data_subsets<- purrr::map2(H5_files, askUser_test_1,  h5read)
df <-purrr::map_dfc(data_subsets, "Data", H5Fopen)

`````
...