首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用带索引的循环读取几个.h5文件

需要使用带索引的循环读取几个.h5文件
EN

Stack Overflow用户
提问于 2019-11-21 12:33:40
回答 1查看 75关注 0票数 0

我得到了一大堆需要阅读和绘制图表的文件。某些数据集具有比其他数据集更多的文件。所以我需要写一个循环来做这件事。到目前为止,我写的代码可以工作,但我永远也搞不清楚如何索引循环来调用文件。我已经尝试了一个简单的

代码语言:javascript
复制
i <-0 
for (i in files){
i <- i + 1
file_[i] <-H5fopen(files[i])
 }

我试过其他版本,但我改了太多,我记不起来了。但当我在底部单独加载文件时。它们会加载,所以我知道在需要循环的区域之前,一切都可以正常工作。

代码语言:javascript
复制
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)

为清晰起见进行了编辑

如果我选择say DS23,那么文件变成1:6 TIVA_000116.h5,TIVA_000117.h5,...

这就是我想要的,如果我运行file_1<- H5Fopen(files[1]),它也会以我期望的方式打开文件。有没有循环遍历文件的方法

然后创造出像这样的东西

代码语言:javascript
复制
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

我希望它能够选择它们,因为我有45个数据集,每个数据集有5个文件,必须创建和转换。因此,我正在尝试尽可能多地实现自动化。

提前使用THanks

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2019-12-03 06:17:03

这是特定的代码,它满足了我的需求,可以打开开关案例中的所有文件,而不管有多少个文件。

代码语言:javascript
复制
data_subsets<- purrr::map2(H5_files, askUser_test_1,  h5read)
df <-purrr::map_dfc(data_subsets, "Data", H5Fopen)
代码语言:javascript
复制
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58967360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档