当我在“工具”选项卡中编辑我的 R 代码片段时,为什么它们在控制台中不可用?

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

问题:

我已导航到 工具>全局选项...>代码 --> 编辑片段... 并且可以看到我应该有权访问的可用片段,编辑添加更多我自己的文件。我添加了一个片段

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

但在我的 interactive() R session 中无法识别。我如何添加片段,知道为什么编辑不起作用吗?

背景:

我最近接触了 R snippets、pre-written 部分代码,以便在 R 控制台上使用字符串检索。我在 YouTube 上看到很多人这样做没有问题。我正在尝试编辑文件以自定义我自己的片段,以加快对 assert::assert()tryCatch() 的常用调用的编写过程。我查看了片段的文件位置以查看 ~\AppData\Roaming\RStudio\snippets\r.snippets 中的内容。我在这两个地方都编辑了文件并重新启动 IDE 和我的 R session 无济于事,我唯一可以访问的片段是从 shinysnippets.

预加载的片段
snippet module
    ${1:name}ui <- function(id){
        ns <- NS(id)
        tagList(
        [=11=]
            )
        }

    ${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} , {
    [=11=]
    })
    
snippet with_progress
    withProgress( message = "${1:message}" , {
    [=11=]
    })

snippet aa
    ${1:dataset} <- ${1:dataset} %>% [=11=]

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({
        
    }, warning = function(w) {
        message(sprintf("Warning in %s: %s", deparse(w[["call"]]), w[["message"]]))
        
    }, error = function(e) {
        message(sprintf("Error in %s: %s", deparse(e[["call"]]), e[["message"]]))
        
    }, finally = {
        
    })   

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

snippet assert
assert::assert(
            ,
            msg = "\n3[31mx3[39m Error:\n "
        )

当在 cmd-line 中输入 observe_event 时,您会看到输入上述代码块的选择,光标会自动在 $ 锚点之间切换。

Session 信息

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      

代码段文件对空格敏感,请改用制表符。

第一个片段应该可以正常工作。第二个将出现在自动完成中,但不会执行任何操作。

RStudio 在保存片段文件时识别新片段,不需要重新启动 RStudio。如果您希望 tryCatch 代码段填充不同用例的特定内容,也可以通过编程方式完成此操作。

正如@DonaldSeinen 指出的那样,R 片段因对空格和制表符敏感而臭名昭著。在编辑 R 代码段时,您需要确保文本字段中没有红色空格,这会使代码段无用。

提示

编写代码片段时,请使用tab以解决此问题。