2013-06-15 2 views
-1

Этот вопрос появился, а затем был удален:Сравните имена путей в R и Python

С Python, имена путей можно выразить тремя способами:

mypath = r"C:\folder\temp.shp"  
mypath = "C:\\folder\\temp.shp"  
mypath = "C:/folder/temp.shp" 

Что все способы имен путей могут быть выражены в Р?

Конец поставленного вопроса. Я не могу говорить о достоверности утверждений о Python, но был удивлен, что простой поиск SO не подвел хорошее описание проблем с R-именем (и специфичными для ОС). (а затем мой частично написанный ответ был удален вместе с вопросом.)

ответ

2

Для платформы независимости, вы можете использовать либо слеш ("C:/folder/temp.shp") или использовать file.path (например file.path('c:','folder','temp.shp'). Последнее особенно удобно для использования с переменными, а не с помощью paste.

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

в Windows компьютера .Rprofile:. .db <- "C:/Dropbox" в OS/X или Linux компьютера .Rprofile: .db <- "/home/foo/Dropbox"

Тогда в вашем коде вы могли бы назвать:

mypath <- file.path(.db, "folder", "temp.shp") 

@DWin уже указал на Windows, специфические методы, которые следует избегать, на мой взгляд именно потому, что они не являются независимыми от платформы (и они, как правило, чтобы быть более запутанным для тех, кто еще не научился побеждать.

1

Третья версия будет работать на всех трех версиях ОС, распространяемых по CRAN. (Версия Windows преобразует слэши в обратную косую черту.) Вторая версия может работать, но только в версии Windows. Первая версия на самом деле не имеет никаких обратных косых черт в ней из-за того, как векторы символов анализируются в R, но вместо этого имеют escape-F и escape-T, которые не являются допустимыми разделителями каталогов.

Что сказал Дирк?

Обратите внимание, что .Platform$file.sep) возвращает системную независимую версию разделителя каталогов и видит, что @ AriB.Friedman уже указал, что ?file.path может использоваться для построения допустимых путей.

+1

Давид, это неверно, так как 'C: /' работает только с одной из трех ОС. –

+0

\ Slaps лба \ –

+1

Прямые косые черты хороши, как и относительные пути. Куда влезть - это еще одна история alltogther. На работе у меня есть вспомогательные функции, заполняющие первый аргумент для 'file.path()' на основе yje OS: либо '/ foo', либо' \\ где-то \ foo'. –

Смежные вопросы