Setarea parametrilor funcției pentru depanare

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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                  FALSE                
clusters            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

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.