我得到了一大堆需要阅读和绘制图表的文件。某些数据集具有比其他数据集更多的文件。所以我需要写一个循环来做这件事。到目前为止,我写的代码可以工作,但我永远也搞不清楚如何索引循环来调用文件。我已经尝试了一个简单的
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)为清晰起见进行了编辑
如果我选择say DS23,那么文件变成1:6 TIVA_000116.h5,TIVA_000117.h5,...
这就是我想要的,如果我运行file_1<- H5Fopen(files[1]),它也会以我期望的方式打开文件。有没有循环遍历文件的方法
然后创造出像这样的东西
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
发布于 2019-12-03 06:17:03
这是特定的代码,它满足了我的需求,可以打开开关案例中的所有文件,而不管有多少个文件。
data_subsets<- purrr::map2(H5_files, askUser_test_1, h5read)
df <-purrr::map_dfc(data_subsets, "Data", H5Fopen)https://stackoverflow.com/questions/58967360
复制相似问题