#' list CMIP5 files
#'
#' @param dir_root root directory of CMIP5 files
#' @param ignore.Misc boolean, whether ignore `Misc` files
#'
#' @examples
#' \dontrun{
#' files_tas <- list_CMIP5Files("J:/CMIP5")
#' files_huss <- list_CMIP5Files("O:/CMIP5/CMIP5_huss")
#' }
#' @keywords internal
#' @export
list_CMIP5Files <- function(dir_root, scenarios = c("historical", "GHG", "Nat", "piControl", "RCP"),
realization = "r1i1p1", ignore.Misc = TRUE)
{
# print(dir_root)
scenarios %<>% paste(collapse = "$|")
dirs <- list.dirs(dir_root, full.names = T)[-1] %>% .[grep("his|RCP|rcp|pi", .)] %>% sort()
names = str_split(basename(dirs), "_") %>% map_chr(1)
dirs %<>% set_names(names)
# browser()
dirs %<>% {.[grep(scenarios, names)]}
if (ignore.Misc) {
I_ignore <- grep("Misc|bin", dirs)
if (!is_empty(I_ignore)) dirs <- dirs[-I_ignore]
}
files <- map(dirs, function(indir) {
ans = dir(indir, full.names = T, pattern = "*.nc$") # rm piControl
ans %>% .[grep(realization, .)]
})
files
}
.scenarios <- c('historical', 'historicalAA', 'historicalANT', 'historicalGHG', 'historicalNat',
'piControl', 'RCP26', 'RCP45', 'RCP60', 'RCP85')[-(2:3)]
.scenarios_label <- c('ALL', 'AA', 'ANT', 'GHG', 'Nat',
'piControl', 'RCP2.6', 'RCP4.5', 'RCP6.0', 'RCP8.5')[-(2:3)]
realization_summary <- function(info, info_pi, rm.na_PI = TRUE) {
d <- map(info, ~.[, .N, .(model)]) %>% {
res <- melt_list(., "scenario")
res$scenario %<>% factor(.scenarios, .scenarios_label)
res
}
d <- rbind(d[scenario != "piControl"],
cbind(info_pi, scenario = "piControl"))
d %<>% dcast(model~scenario, value.var = "N")
if (rm.na_PI) d <- d[!is.na(piControl), ]
# d <- d[!is.na(ALL), ] # ALL not NA
num_model <- d[, -1] %>% {!is.na(.)} %>% colSums2(na.rm = 2)
num_ensemble <- d[, -1] %>% as.matrix() %>% colSums2(na.rm = 2)
d_num <- rbind(num_ensemble, num_model) %>% as.data.table() %>% set_colnames(colnames(d)[-1]) %>%
cbind(model = c("Total realizations", "Total models"), .)
d <- rbind(d, d_num)
d
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.