0

澄清

用函数解决这个问题是不可能的,@IInspectable 在旧的、已删除的问题下的评论中友好地确认了这一点。长话短说:反斜杠需要在字符串文字中进行转义,即'C:\\Marketing'需要传递 a 而不是'C:\Marketing'. 我完全了解这个和这个问题,我在下面的回答不是关于抛出的错误、手动解决方案或使用其他相关问题中给出的其他软件(例如 AutoHotkey)。

请注意,这个问题是对另一个问题的跟进,感谢@IInspectable 的宝贵意见。

“Windows”路径...

C:\Marketing经常通过将 Windows 格式的路径(如 )粘贴到 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')不是一个选项,因为这正是我想以某种方式自动化它的原因。

一个与这个问题密切相关的问题是here,但它基于我不想安装的 Tinn-R GUI 和 AutoHotkey 软件。

救援插件

解决方案比我想象的更接近,一个 RStudio 插件(参见例如这里如何使用它们)通过将所有反斜杠更改为正斜杠并将其插入回代码中来解析选定的文本(即粘贴的“Windows”路径)。下面的答案中的代码和屏幕截图。

4

1 回答 1

0

一个可行的解决方案(或者更确切地说是一种解决方法,因为最初我想用一个函数来解决这个问题)

正如我在上面的问题中所写,用函数解决这个问题是不可能的,所以我尝试了一个不同的解决方案,这正是我想要的,并且可能对其他人有用。我已经构建了一个具有以下功能的插件包( 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”路径):

插件截图

于 2017-02-18T00:17:44.100 回答