Облегчение от раздражения обратной косой черты в R для Windows

В начале своей R-жизни я обнаружил, что R и окна находятся на разных страницах, когда дело доходит до разделителя между каталогами и подкаталогами. Несмотря на то, что я знаю о проблеме, мне по-прежнему больно, когда приходится вручную ставить обратную косую черту перед всеми моими обратными косыми чертами или заменять их передними косыми чертами.

Мне нравится копировать имя пути или полное имя файла с любым из нескольких приложений, которые я запускаю на своем компьютере (например, XYPlorer, Everything by voidtools), а затем вставлять его в Tinn-R. Есть ли в любом случае, что я мог бы автоматизировать задачу, которую я сейчас делаю вручную.

  • Есть ли настройки в Tinn-R?
  • Есть ли настройка в R?
  • Есть ли скрипт autohotkey, который может сделать это для меня по умолчанию?

Фон для тех, кто не знает, о чем я говорю

Цитирование из R для Windows FAQ, Версия для R-2.9.2, BD Ripley и DJ Murdoch

Обратные косые черты должны быть удвоены в символьных строках R, поэтому, например, требуется `"d:\R-2.9.2\library\xgobi\scripts\xgobi.bat"". Вы можете облегчить себе жизнь, используя косые черты в качестве разделителей пути: они работают под Windows

8 ответов

Решение

Я написал скрипт autohotkey, который запускается, набирая "rfil " - без кавычек.

:O:rfil:: ;replaces backslashes with forward slashes in a file name that is stored on the clipboard
StringReplace,clipboard,clipboard,\,/,All
send %clipboard%
return

Если кто-то может сказать мне более быстрый способ, чем использовать команду send, я был бы признателен. У меня постоянно работает скрипт autohotkey на всех моих компьютерах, поэтому мне не нужно было загружать новое программное обеспечение для запуска этого скрипта. Я просто добавил его в файл сценария по умолчанию.

Я буду рад объяснить, что я сделал, если вы хотите, чтобы я.

Вы можете создать функцию-оболочку для всех путей:

> replace.slash <- function(path.name) gsub("\\\\","/",path.name)
> path.name <- "c:\\tmp\\"
> replace.slash(path.name)
[1] "c:/tmp/"

[Редактировать]: Спасибо, Хэдли. Я исправил ошибку там.

Между прочим, я нашел эту очень полезную дискуссию на эту тему.

Я адаптировал следующий общий код autohotkey для замены всех обратных косых черт на прямые, когда я вставляю что-либо в RStudio. У этого подхода есть свои плюсы и минусы.

Плюсы: вам не нужно думать об этом. Код будет работать только в том случае, если активным окном является RStudio.

Минусы: код вызывается каждый раз, когда вы вставляете что-то в R. Каждый раз, когда он пытается найти обратную косую черту и заменить ее прямой косой чертой.

GroupAdd, R, RStudio

;replaces backslashes with forward slashes in a file name that is stored on the clipboard
#IfWinActive ahk_group R
   ^v::
      StringReplace,clipboard,clipboard,\,/,All
      send %clipboard%
   return
#IfWinActive

ClipPath добавляет пункты меню, вызываемые щелчком правой кнопкой мыши, чтобы выбрать, какой тип слеша вы хотите вставить

С помощью Getting Genetics Done, похоже, это может быть полезным ресурсом для пользователей R в целом.

Не совсем тот ответ, который вы ищете, но R имеет свои собственные функции сценариев оболочки, которые я часто использую:

list.files (, full = TRUE) [возвращает полный путь с соответствующими разделителями]

file.path () [объединяется с разделителем для ОС]

и так далее...

Почему бы не создать функцию, которая проверяет ОС и возвращает правильный разделитель файлов (решение Java, я верю)?

file_sep <- function(){
ifelse(.Platform$OS.type == "unix", "/", "//")
}
file_sep()

Вы можете выбрать более короткое имя, если хотите. Большой недостаток здесь заключается в том, что вам нужно склеивать пути к файлам, но это все еще стоит того, если вы работаете над большими проектами.

Немного расширив код @Farrel (большое спасибо!), Вот мой скрипт AutoHotkey, который получит полный путь к любому выбранному мной файлу, а затем (при желании) поменяет слэши для лучшего использования в R.

Сценарий также заменяет все подключенные диски полным сетевым путем. Чтобы использовать это, вам нужно отредактировать этот сценарий, чтобы найти ваши конкретные подключенные диски, а затем заменить эти буквы дисков полным путем.

На настройку потребовалось немного времени, но это очень полезно. Я использую это каждый день.

;If Windows explorer is active...
#IfWinActive ahk_class CabinetWClass 

; ALT + F - Get the filepath to the file
!f::
SendInput, ^c
Sleep 100
Clipboard := Clipboard
return

;Check for and replace mapped drive names on the clipboard with full file paths
If InStr(Clipboard,"X:\",1) {
Clipboard := "\\SERVER_NAME\g$\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"K:\",1) {
Clipboard := "\\SERVER_NAME\Data\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"Q:\",1) {
Clipboard := "\\SERVER_NAME\Data\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"L:\",1) {
Clipboard := "\\SERVER_NAME\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} 
Return

; ALT + S - Replaces backslashes with forward slashes (helpful for R)
; Source: https://stackru.com/questions/1407238/relief-from-backslash-irritation-in-r-for-windows
!s::
StringReplace,clipboard,clipboard,\,/,All
send %clipboard%
return

; Scripts below this point will run in any active window
#IfWinActive

Это код AutoIt, который делает то же самое (заменяет \ с /).

Local $text1 = ClipGet()
$text2=StringReplace($text1,"\","/")
ClipPut($text2)

Я использую поиск и замену, но, конечно, это не полностью автоматически, и вы должны позаботиться о том, чтобы не заменить "\t" или "\n".

Другие вопросы по тегам