Вопрос:
Я перешел к Инструменты>Общие параметры...>Код --> Редактировать фрагменты... и вижу доступные фрагменты, к которым у меня должен быть доступ, редактирую файл, добавляя свои собственные. Я добавил фрагмент
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}
})
но он не распознается в моем сеансе interactive()
R. Как добавить фрагмент, есть идеи, почему редактирование не работает?
Фон:
Недавно я познакомился с R snippets
, предварительно написанными фрагментами кода для извлечения с помощью строки в консоли R. Я видел, как несколько человек на YouTube делают это без проблем. Я пытаюсь отредактировать файл, чтобы настроить свои собственные фрагменты, чтобы ускорить процесс написания часто используемых вызовов assert::assert()
и tryCatch()
. Я просмотрел расположение файлов фрагментов, чтобы увидеть содержимое в ~\AppData\Roaming\RStudio\snippets\r.snippets
. Я редактировал файл в обоих местах и перезапускал IDE и сеанс R безрезультатно, и единственные фрагменты, к которым я могу получить доступ, — это предварительно загруженные из shinysnippets
.
r.snippets
файл;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}"
)
При вводе observe_event
в командной строке вас приветствует выбор ввода вышеуказанного фрагмента кода, при этом курсор автоматически переключается между якорями $
.
Информация о сеансе
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
заполнялся определенным контентом для разных вариантов использования.
R Snippets печально известны своей чувствительностью к пробелам и табуляциям, как указал @DonaldSeinen. Вы должны убедиться, что в текстовых полях нет красных пробелов при редактировании фрагмента R, это сделает фрагмент бесполезным.
СОВЕТ
при написании кода фрагмента используйте tab
, чтобы решить эту проблему.