Облегчение от раздражения обратной косой черты в 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".