Я выполняю две петли в R: внешний - более 5 каталогов, а внутренний - над 15 файлами, существующими в каждом каталоге.R - Как показать прогресс в вложенных циклах?
Мой вопрос: как отобразить ход выполнения задачи в этом сценарии?
Пожалуйста, смотрите следующий пример:
# these are the directories
vars <- c("clt", "hurs", "pr", "tas", "was")
# prepare progress info
pb <- txtProgressBar(min = 0, max = length(vars), style = 3)
# first, loop through variables
for (i in 1:length(vars)){
# do some stuff here: each file takes a bit long to finish
files <- c("was_Amon_CanESM2_historical_r1i1p1_185001-200512.nc", "was_Amon_CanESM2_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_GFDL-ESM2M_historical_r1i1p1_186101-200512.nc", "was_Amon_GFDL-ESM2M_historical_r1i1p1_186101-200512_SA.nc",
"was_Amon_GISS-E2-H_historical_r1i1p1_185001-200512.nc", "was_Amon_GISS-E2-H_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_GISS-E2-R-CC_historical_r1i1p1_185001-201012.nc", "was_Amon_GISS-E2-R-CC_historical_r1i1p1_185001-201012_SA.nc",
"was_Amon_GISS-E2-R_historical_r1i1p1_185001-200512.nc", "was_Amon_GISS-E2-R_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_HadGEM2-AO_historical_r1i1p1_186001-200512.nc", "was_Amon_HadGEM2-AO_historical_r1i1p1_186001-200512_SA.nc",
"was_Amon_HadGEM2-CC_historical_r1i1p1_185912-200511.nc", "was_Amon_HadGEM2-CC_historical_r1i1p1_185912-200511_SA.nc",
"was_Amon_IPSL-CM5A-MR_historical_r1i1p1_185001-200512.nc", "was_Amon_IPSL-CM5A-MR_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_IPSL-CM5B-LR_historical_r1i1p1_185001-200512.nc", "was_Amon_IPSL-CM5B-LR_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_MIROC4h_historical_r1i1p1_195001-200512.nc", "was_Amon_MIROC4h_historical_r1i1p1_195001-200512_SA.nc",
"was_Amon_MRI-CGCM3_historical_r1i1p1_185001-200512.nc", "was_Amon_MRI-CGCM3_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_NorESM1-M_historical_r1i1p1_185001-200512.nc", "was_Amon_NorESM1-M_historical_r1i1p1_185001-200512_SA.nc",
"was_Amon_bcc-csm1-1-m_historical_r1i1p1_185001-201212.nc", "was_Amon_bcc-csm1-1-m_historical_r1i1p1_185001-201212_SA.nc",
"was_Amon_bcc-csm1-1_historical_r1i1p1_185001-201212.nc", "was_Amon_bcc-csm1-1_historical_r1i1p1_185001-201212_SA.nc",
"was_Amon_inmcm4_historical_r1i1p1_185001-200512.nc", "was_Amon_inmcm4_historical_r1i1p1_185001-200512_SA.nc"
)
# loop through files
for (j in files){
# do some stuff here too
# inform progress on files
Sys.sleep(0.05)
setTxtProgressBar(pb, i)
}
}
Я показываю здесь прогресс только на каждом каталоге. Однако, поскольку обработка всех файлов в каталоге занимает много времени, я бы предпочел показать прогресс для каждого из 75 файлов.
Однако я не могу придумать способ сделать это на вложенном цикле. Кто-нибудь есть идеи?
В чем проблема с вложенными циклами? Вам сложно определить общее количество итераций? – MrFlick
@MrFlick Я добавил исходное сообщение, чтобы добавить конкретный пример. Дело в том, что я только узнаю общее количество итераций после ввода в первый цикл. Надеюсь, это легко увидеть сейчас. – thiagoveloso