Вопрос по r, interop, operating-system – Существуют ли функции R, которые зависят от системы?

6

Мои коллеги хотели бы убедиться, что наша работа в R не зависит от платформы, в частности, этот код будет работать в Linux, Mac и Windows, а файлы, созданные в одной системе, будут работать в других системах.

Так как проблема в моей группе уже поднималась, я был бы признателен за общий ответ, который поможет мне уверенно уверять моих сотрудников в том, что проблемы не будет. Например, было бы полезно иметь ссылку, отличную от & quot; потому что(Эксперт предметной области) так сказал на ТАК.

Generally, is there a way to know if any features of R are platform-specific (can I assume that this would be stated in a function's help)? Are there packages or functions that I can be confident will be platform-independent? Are there types of packages or functions that I should be wary of?

Ранее я задавал два вопроса о кроссплатформенной читаемости файлов, созданных R:Каковы недостатки использования файлов .Rdata по сравнению с HDF5 или netCDF? а такжеR-объекты сбрасываются с использованием `dump` кроссплатформенного кроссплатформенного?

Ваш Ответ

3   ответа
4

Помимо ответа Карла,obvious способ гарантировать, что ваша работа в независимости от платформы заключается вtest на всех платформах.

Это именно то, что CRAN делает со своими 3800+ пакетами, и у вас есть доступ к журналамВот.

Короче говоря, R действительно старается быть независимым от платформы и в основном добивается успеха. Чтобы сделать это с вашим кодом, вы должны избегать API или инструментов, которые вводят зависимости. Посмотрите на абстракции какsystem.file(package="boot") и функции, которые они используют - вы можете легко абстрагировать файловую систему «корни», а разделители уже позаботились.

2

Проверьте cran.r-project.org для списков пакетов. Каждый пакет имеет страницу, которая сообщит вам, прошло ли оно тестирование для различных операционных систем. Кроме того, как вы и предполагали, файлы справки довольно четко описывают зависимости ОС. R является "умным" достаточно, чтобы перевести & quot; / & quot; на & quot; \ & quot; в путях для тех бедных людей, работающих в Windows. Вообще говоря, графический доступ - это область, которая, скорее всего, будет зависеть от платформы. Очевидно, что если вашей системе не хватает {X11, ImageMagick, ..}, вы все равно застряли.

Стоит отметить, что функцияfile.path() является ключом для создания независящих от платформы путей к файлам.
@OP: Что касается путей к файлам, имейте в виду, что конечные косые черты (иногда) недопустимы в Windows.file.exists(normalizePath("~")) возвращаетсяTRUE в то время какfile.exists(normalizePath("~/")) возвращаетсяFALSE, ОбаTRUE в линуксе
2

Помимо комментариев Карла и Дирка, вы должны понимать, что любой пакет, который требует компиляции из исходного кода (как и многие (все?) Пакеты, которые находятся на Omegahat, Rforge или r-forge), должен быть сделан на машине, которая имеет соответствующие библиотеки C и Fortran. Некоторые интересные пакеты зависят от GTK + и Tcl / Tk, и может потребоваться убедиться, что вы можете получить правильные версии.http://r.research.att.com/ страница, которую поддерживает Саймон Урбанек, является полезным ресурсом для поддержки ресурсов поддержки для Mac.

Похожие вопросы