(Acest articol a fost publicat pentru prima dată pe Jason Bryerși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Tind să scriu o mulțime de funcții care creează grafică specifică implementată cu ggplot2. Deși încerc să aleg parametri grafici (de exemplu, culori, dimensiunea textului etc.) care sunt rezonabili, de obicei voi defini toate elementele estetice relevante ca parametri ai funcției mele. Drept urmare, funcțiile mele tind să aibă o mulțime de parametri. Când trebuie să depanez funcția, trebuie să am toți acei parametri setați în mediul global, care de obicei necesită să evidențiez fiecare sarcină și să o rulez. Această funcție automatizează acest proces. Puteți trece orice funcție și va încerca să setați parametri pentru mediul dat (mediul global în mod implicit). Va returna un cadru de date cu o coloană care indică dacă variabila a fost setată și valoarea. Acest lucru este util pentru a ști ce parametri nu au o valoare implicită care trebuie setată singur.
#' Set function parameters to an environment.
#'
#' This function is designed to help debug functions. It will attempt to set all
#' the default parameter values to the specified environment (global environment
#' by default). This is useful for when you want to execute code within the
#' function definition interactively but need the parameters set in the current
#' environment.
#'
#' **Warning:** This function will modify the global environment and therefore
#' violates CRAN policy
#' ("Packages should not modify the global environment (user’s workspace)")
#' (https://cran.r-project.org/web/packages/policies.html#Source-packages).
#'
#' @param FUN the function to assign parameters to an environment.
#' @param envir the environment to assign the variables to. Defaults to the
#' global environment.
#' @param verbose whether to return the data frame invisibly or to print the results.
#' @return a data frame where row names correspond to the parameter name with
#' two columns: `set` which is logical indicating if the variable was set
#' and `value` with a character representation of the variable value.
set_function_params <- function(FUN, envir = globalenv(), verbose = interactive()) {
params <- formals(FUN)
params_set <- data.frame(row.names = names(params),
set = rep(FALSE, length(params)),
value = rep(NA_character_, length(params)))
for(param in names(params)) {
value <- params((param))
if(!missing(value)) {
if(is.character(value)) {
assign(param, value, envir = envir)
params_set(param,)$value <- value
} else {
assign(param, eval(value), envir = envir)
params_set(param,)$value <- eval(value)
}
params_set(param,)$set <- TRUE
}
}
if(verbose) {
return(params_set)
} else {
invisible(params_set)
}
}
Foarte recent am încercat să depanez o funcție care creează diagrame de profil pentru analiza cluster (clav::profile_plot()documentație). Această funcție are 23 de parametri! Setarea manuală a acestora este destul de obositoare.
# List objects in the current environment ls()
(1) "set_function_params"
# Call the function param_set_result <- set_function_params(clav::profile_plot) # Check to see if the parameters are actually set ls()
(1) "bonferroni" "center_alpha" "center_band" (4) "center_fill" "cluster_label_hjust" "color_palette" (7) "hjust" "label_clusters" "label_means" (10) "label_outcome_means" "label_profile_means" "param_set_result" (13) "point_size" "se_factor" "set_function_params" (16) "standardize" "text_size" "title" (19) "ylab"
Putem examina cadrul de date care oferă un rezumat al parametrilor setați (sau nu).
param_set_result
set value df FALSEclusters FALSE df_dep FALSE standardize TRUE TRUE bonferroni TRUE TRUE label_means TRUE TRUE label_profile_means TRUE TRUE label_outcome_means TRUE TRUE center_band TRUE 0.25 center_fill TRUE #f0f9e8 center_alpha TRUE 0.1 text_size TRUE 4 hjust TRUE 0.5 point_size TRUE 2 se_factor TRUE 1.96 color_palette TRUE 2 cluster_labels FALSE cluster_order FALSE label_clusters TRUE TRUE cluster_label_x FALSE cluster_label_hjust TRUE 5 ylab TRUE Mean Standard Score title TRUE Cluster Profiles





