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

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

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

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

Предыстория для тех, кто не понимает, о чем я

Цитата из часто задаваемых вопросов по R для Windows, версия для R-2.9.2, Б. Д. Рипли и Д. Дж. Мердок

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


person Farrel    schedule 10.09.2009    source источник


Ответы (9)


Я написал скрипт 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

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

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

person Farrel    schedule 16.09.2009
comment
Как мне теперь поставить тег autohotkey на этот вопрос или этот ответ? - person Farrel; 17.09.2009

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

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

person Matt Parker    schedule 14.09.2009
comment
Ип. ClipPath выглядит очень простым решением. Вы видели, работает ли он в Vista или Windows 7. Я заметил строку Последняя версия 2.1: Размер загружаемого файла: 30 КБ (Поддерживаемые ОС: Win95/98/Me/NT4.0/2000/XP). Теперь, когда я знаю об этом, нет решение ежу понятно, позвольте мне посмотреть, существует ли что-то подобное в Tinn-R. - person Farrel; 15.09.2009
comment
Не проверял, извините - я только что увидел это в этой записи в блоге и сразу подумал об этом вопросе. Надеюсь, что это работает! Кажется, что добавить такую ​​функцию в Tinn-R не составит труда, если разработчики подпишутся. - person Matt Parker; 15.09.2009
comment
Я смотрю вокруг tinn-r и не нашел встроенной функции для этого. Я не пробовал писать макросы в tinn-r, поэтому я собираюсь использовать autohotkey. - person Farrel; 17.09.2009

Я адаптировал следующий общий код автогорячих клавиш, чтобы заменить все обратные косые черты прямыми косыми чертами всякий раз, когда я вставляю что-либо в 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
person user1583016    schedule 12.02.2016

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

person Etienne Racine    schedule 10.09.2009
comment
Да, я тоже это сделал, но это немного неприятно, если я не могу сделать макрос в Tinn-R. Вы используете Тинн-Р? - person Farrel; 11.09.2009
comment
Да, макрос не помешал бы. Я больше не использую Tinn-R, но у меня все еще есть проблема с другими редакторами. Может быть, кто-то, свободно говорящий на регулярном выражении, мог бы дать такое, которое обрабатывает наиболее распространенные случаи замены и в основном не заменяет каждый \. - person Etienne Racine; 11.09.2009

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

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

file.path() [соединяется с разделителем, специфичным для ОС]

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

person hatmatrix    schedule 10.09.2009
comment
И не забывайте о file.choose() - person hadley; 11.09.2009
comment
Неплохо. Я всегда забываю это. - person hatmatrix; 11.09.2009

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

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

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

Между прочим, я нашел очень полезное обсуждение на эту тему< /а>.

person Shane    schedule 10.09.2009
comment
Это недопустимая функция, и вообще такая стратегия вряд ли сработает. - person hadley; 11.09.2009

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

Local $text1 = ClipGet()
$text2=StringReplace($text1,"\","/")
ClipPut($text2)
person Stat-R    schedule 06.12.2012

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

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

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

person Dan    schedule 11.09.2009

Немного расширив код @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://stackoverflow.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
person Ryan Bradley    schedule 19.07.2019