RStudio addin для разбора входных строковых литералов путем замены обратных косых черт (как в 'C:\Marketing') на прямые косые черты
осветление
Решение этой проблемы с помощью функции было невозможно, что @IInspectable любезно подтвердило в комментариях к старому удаленному вопросу. Короче говоря: обратные слеши должны быть экранированы в строковых литералах, т.е. 'C:\\Marketing'
должен быть передан вместо 'C:\Marketing'
, Я полностью осведомлен об этом и этом вопросе, и мой нижеприведенный ответ не относится к ошибкам, ручным решениям или использованию другого программного обеспечения (например, AutoHotkey), как указано в других смежных вопросах.
Обратите внимание, что вопрос является продолжением другого, спасибо @IInspectable за ваши ценные комментарии.
"Windows" пути...
Я работаю с путями в формате Windows (например, C:\Marketing
) довольно часто, вставляя их в код R. Изменение обратной косой черты каждый раз очень раздражает, поэтому я попытался написать для них функцию анализа. Желаемое использование состояло в том, чтобы использовать эту функцию в коде с скопированным путем в качестве параметра, т.е. path_parse('C:\Marketing')
, Мой первый подход, основанный на ответе @Tyler Rinker, заключался в следующем:
path_parse <- function(path = 'clipboard') {
path <- if (path == 'clipboard') readClipboard() else path
return(chartr('\\', '/', path))
}
и он работал хорошо с путем, скопированным в буфер обмена, но, к сожалению, выдавал сообщение об ошибке an unrecognized escape in character string
Как, например, в этом вопросе, при использовании вставленных строковых литералов:
> path_parse('C:\Marketing')
Error: '\M' is an unrecognized escape in character string starting "'C:\M"
Конечно, вручную изменяя все входные строковые литералы (как при передаче 'C:\\Marketing'
или же 'C:/Marketing'
вместо 'C:\Marketing'
) здесь не вариант, так как именно поэтому я хочу как-то автоматизировать его.
Один тесно связанный с этим вопрос находится здесь, но он основан на графическом интерфейсе Tinn-R и программном обеспечении AutoHotkey, которое я не хочу устанавливать.
Аддинс на помощь
Решение было ближе, чем я думал, надстройка RStudio (см., Например, здесь, как их использовать), анализировав выделенный текст (т.е. вставленный путь "Windows"), изменив все обратные косые черты на прямые косые черты и вставив их обратно в код. Код и скриншоты в ответе ниже.
1 ответ
Рабочее решение (или, скорее, обходной путь, так как изначально я хотел решить это с помощью функции)
Как я писал в приведенном выше вопросе, решить эту проблему с помощью функции было невозможно, поэтому я попробовал другое решение, которое делает именно то, что я хотел, и может быть полезно и для других. Я собрал пакет дополнений ( хорошая статья RStudio) со следующей функцией:
#' Parse selected "Windows" path to an "R-usable" one
#'
#' @return
#' @export
#' @importFrom rstudioapi getActiveDocumentContext
#' @importFrom magrittr '%>%'
#'
#' @examples
path_parse <- function() {
getActiveDocumentContext()[['selection']][[1]][['text']] %>%
{ gsub('\\\\', '/', .) } %>%
{ gsub('//', '/', .) } %>% # To remove double f. slashes
{ ifelse(check_for_quotes(.), insertText(.), insertText(paste0('\'', ., '\''))) }
}
### Old function:
# path_parse <- function() {
# getActiveDocumentContext()[['selection']][[1]][['text']] %>%
# { chartr('\\', '/', .) } %>% { insertText(paste0('\'', ., '\'')) }
# }
и назначил Ctrl+Alt+P
ярлык к нему.
Что он делает, в основном, анализирует выделенный текст (то есть вставленный путь "Windows"), превращая все обратные косые черты в прямые косые черты и вставляя их обратно в код: