Search code examples
rsessionrstudiocode-snippetsdevtools

When I edit my R snippets in the Tools tab, why are they not available in the console?


Question:

I have navigated to Tools>Global Options...>Code --> Edit Snippets... and can see the available snippets that I should have access to, edit the file to add more of my own. I have added a snippet

snippet tryCatch
    ${1:variable} <- tryCatch({
        ${2}
    }, warning = function(w) {
        message(sprintf("Warning in %s: %s", deparse(w[["call"]]), w[["message"]]))
        ${3}
    }, error = function(e) {
        message(sprintf("Error in %s: %s", deparse(e[["call"]]), e[["message"]]))
        ${4}
    }, finally = {
        ${5}
    })  

but it fails to be recognized in my interactive() R session. How do I add a snippet, any ideas why editing isn't working?

Background:

I have recently been introduced to R snippets, pre-written sections of code to retrieve with a string while on the R console. I have seen multiple people on YouTube do this with no issue. I am trying to edit the file to customize my own snippets to speed the writing process up of commonly used calls to assert::assert() and tryCatch(). I have looked at the file location of the snippets to see the content in ~\AppData\Roaming\RStudio\snippets\r.snippets. I have edited the file in both places and resarted the IDE and my R session to no avail and the only snippets I can access are the one preloaded from shinysnippets.

  • r.snippets file;
snippet module
    ${1:name}ui <- function(id){
        ns <- NS(id)
        tagList(
        ${0}
            )
        }

    ${1:name} <- function(input, output, session){
        ns <- session\$ns
    }
    
    # Copy in UI
    #${1:name}ui("${1:name}ui")
    
    # Copy in server
    #callModule(${1:name}, "${1:name}ui")
    
snippet observe_event
    observeEvent( ${1:event} , {
    ${0}
    })
    
snippet with_progress
    withProgress( message = "${1:message}" , {
    ${0}
    })

snippet aa
    ${1:dataset} <- ${1:dataset} %>% ${0}

snippet sidebar_page
    library(shiny)
    
    ui <- fluidPage(
      titlePanel( "${1:title}" ), 
      
      sidebarLayout(
        sidebarPanel(
        
        ),
        mainPanel(
        
        )
      )
    )
    
    server <- function(input, output, session) {
      
    }
    
    shinyApp(ui, server)

snippet tryCatch
    ${1:variable} <- tryCatch({
        ${2}
    }, warning = function(w) {
        message(sprintf("Warning in %s: %s", deparse(w[["call"]]), w[["message"]]))
        ${3}
    }, error = function(e) {
        message(sprintf("Error in %s: %s", deparse(e[["call"]]), e[["message"]]))
        ${4}
    }, finally = {
        ${5}
    })   

snippet checkData
checkmate::checkDate(
                from,
                upper = today(),
                len = 1
)

snippet assert
assert::assert(
            ${1},
            msg = "\n\033[31mx\033[39m Error:\n ${2}"
        )

When typing observe_event into the cmd-line, you are greeted with a choice to input the above chunk of code, with the cursor automatically switching between the $ anchors.

Session Info

devtools::sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] assert_1.0.1               rameritrade_0.1.5          httr_1.4.2                
 [4] quantmod_0.4.18            RVerbalExpressions_0.1.0   PerformanceAnalytics_2.0.4
 [7] tbl2xts_1.0.4              bizdays_1.0.9              tictoc_1.0.1              
[10] glue_1.6.1                 here_1.0.1                 polite_0.1.1              
[13] rvest_1.0.2                Riex_1.0.2                 TTR_0.24.3                
[16] xts_0.12.1                 zoo_1.8-9                  lubridate_1.8.0           
[19] forcats_0.5.1              stringr_1.4.0              dplyr_1.0.8               
[22] purrr_0.3.4                readr_2.1.2                tidyr_1.2.0               
[25] ggplot2_3.3.5              tidyverse_1.3.1            plyr_1.8.6                
[28] furrr_0.2.3                future_1.24.0              tidyjson_0.3.1            
[31] reshape2_1.4.4             ProjectTemplate_0.10.2     tibble_3.1.6              
[34] digest_0.6.29             

loaded via a namespace (and not attached):
  [1] utf8_1.2.2               tidyselect_1.1.2         lme4_1.1-28             
  [4] grid_4.1.0               robotstxt_0.7.13         munsell_0.5.0           
  [7] codetools_0.2-18         effectsize_0.6.0.1       miniUI_0.1.1.1          
 [10] withr_2.5.0              colorspace_2.0-3         config_0.3.1            
 [13] knitr_1.37               rstudioapi_0.13          listenv_0.8.0           
 [16] emmeans_1.7.2            httr2_0.1.1              urltools_1.7.3          
 [19] roll_1.1.6               polyclip_1.10-0          farver_2.1.0            
 [22] datawizard_0.3.0         rprojroot_2.0.2          parallelly_1.30.0       
 [25] vctrs_0.3.8              generics_0.1.2           xfun_0.30               
 [28] ipred_0.9-12             R6_2.5.1                 shinysnippets_0.0.0.9000
 [31] cachem_1.0.6             assertthat_0.2.1         promises_1.2.0.1        
 [34] scales_1.1.1             nnet_7.3-16              ggExtra_0.9             
 [37] gtable_0.3.0             miceadds_3.11-6          globals_0.14.0          
 [40] timeDate_3043.102        rlang_1.0.1              berryFunctions_1.21.0   
 [43] splines_4.1.0            lazyeval_0.2.2           keyring_1.3.0           
 [46] broom_0.7.12             checkmate_2.0.0          yaml_2.2.1              
 [49] abind_1.4-5              modelr_0.1.8             backports_1.4.1         
 [52] httpuv_1.6.5             tools_4.1.0              lava_1.6.10             
 [55] usethis_2.1.5            ellipsis_0.3.2           tsibble_1.1.1           
 [58] Rcpp_1.0.8               timetk_2.7.0             rpart_4.1-15            
 [61] slider_0.2.2             haven_2.4.3              fs_1.5.2                
 [64] magrittr_2.0.2           data.table_1.14.2        brochure_0.0.0.9023     
 [67] warp_0.2.0               triebeard_0.3.0          reprex_2.0.1            
 [70] mvtnorm_1.1-3            sjmisc_2.8.9             pkgload_1.2.4           
 [73] hms_1.1.1                mime_0.12                xtable_1.8-4            
 [76] XML_3.99-0.9             sjstats_0.18.1           readxl_1.3.1            
 [79] testthat_3.0.4           compiler_4.1.0           mice_3.14.0             
 [82] crayon_1.5.0             minqa_1.2.4              htmltools_0.5.2         
 [85] later_1.3.0              tzdb_0.2.0               RcppParallel_5.1.5      
 [88] DBI_1.1.2                tweenr_1.0.2             sjlabelled_1.1.8        
 [91] dbplyr_2.1.1             MASS_7.3-54              rappdirs_0.3.3          
 [94] boot_1.3-28              Matrix_1.3-3             cli_3.2.0               
 [97] mitools_2.4              runner_0.4.1             quadprog_1.5-8          
[100] parallel_4.1.0           insight_0.16.0           gower_1.0.0             
[103] golem_0.3.2              pkgconfig_2.0.3          microbenchmark_1.4.9    
[106] recipes_0.2.0            roxygen2_7.1.2           xml2_1.3.3              
[109] hardhat_0.2.0            estimability_1.3         prodlim_2019.11.13      
[112] anytime_0.3.9            attempt_0.3.1            parameters_0.16.0       
[115] tidyquant_1.0.3          RQuantLib_0.4.15         cellranger_1.1.0        
[118] curl_4.3.1               shiny_1.7.1              gtools_3.9.2            
[121] rjson_0.2.21             nloptr_2.0.0             bench_1.1.2             
[124] lifecycle_1.0.1          nlme_3.1-152             jsonlite_1.7.3          
[127] desc_1.4.1               fansi_1.0.2              pillar_1.7.0            
[130] lattice_0.20-44          fastmap_1.1.0            survival_3.2-11         
[133] ratelimitr_0.4.1         bayestestR_0.11.5        ggforce_0.3.3           
[136] class_7.3-19             stringi_1.6.2            performance_0.8.0       
[139] Quandl_2.11.0            rsample_0.1.1            memoise_2.0.1           
[142] future.apply_1.8.1      

Solution

  • R Snippets are notorious for being sensitive to spaces vs tabs as @DonaldSeinen has pointed out. You need to ensure that there are no red spaces in the text fields when editing your R snippet, this will render the snippet useless.

    TIP

    when writing snippet code, please use tab in order to remedy this problem.