Скомпилировать сценарий R в автономный файл .exe?


87

Есть ли простой способ скомпилировать мой Rскрипт в отдельный .exeфайл, как это делает Matlab?


15
Очень короткий ответ: Нет. Никогда не было.
Дирк Эддельбюттель

2
На самом деле я хотел бы распространять его, но сохраняя в секрете скрипты и алгоритм, есть ли способ зашифровать тот или иной способ достижения этой цели?
Джойс

2
Много обсуждений на stackoverflow.com/questions/4707276/…
Бен Болкер

1
@Joyce, стандартным решением для сокрытия кода является распространение приложения на сервере. Итак, ваши пользователи будут подключаться через сервер. Вы не только сможете скрыть код, но и ваши пользователи всегда будут иметь доступ к самой последней версии. Однако вам потребуется создать серверную инфраструктуру (возможно, лучше всего использовать облачного провайдера R).
Tripartio

1
Создание пакета поможет распространить общий код. Я тоже искал возможность создать exe для рутинных задач / функций, вычислений, которые повторяются снова и снова. И поделиться exe с теми, кто не использует кодирование / предпочитает приложение на основе пользовательского интерфейса. К сожалению все еще ищу пути.
bonCodigo

Ответы:


28

На самом деле есть способ найти решение, которое отвечало бы вашим требованиям. Прочтите статью «Развертывание настольных приложений с R на R-Bloggers». Как подробно описано в статье, вы в конечном итоге будете использовать еще несколько вещей, чем один exe-файл.

Также я хотел бы обратить ваше внимание на RGtk2 с использованием RGtk2, вы можете попытаться разработать свой собственный интерфейс на R. Если дело дойдет до крайности, я надеюсь, что вы могли бы упаковать свой код R вместе с портативной версией R и зависимостей в один установщик и make и app из него, что создало бы иллюзию единственного exe-файла.

В своем вопросе вы спросили, легко ли разработать автономный исполняемый файл, интерпретирующий код R. Я бы не сказал, что это просто. Если у вас есть сильное желание запустить код R из приложения, вы можете сделать это более простым способом, используя RCaller для Java или R.NET .


1
Связанная статья об установке настольных приложений с помощью R действительно хороша (используются портативные и блестящие приложения!), Thx!
R Yoda

2
@RYoda Я рада это прочитать. Интерес к этой теме есть. Если вы хотите придерживаться Shiny, эта статья содержит интересные советы по упаковке приложения Shiny как настольного приложения Windows.
Конрад

также можно использовать движок сценариев RCaller во всем API javax.script, см. mhsatman.com/rcaller-3-0
jbytecode

11

В ответ на ваш комментарий:

На самом деле я хотел бы распространять его, но сохраняя в секрете скрипты и алгоритм, есть ли способ зашифровать тот или иной способ достижения этой цели?

Вы можете (вроде) сделать это, сохранив функции с помощью save(). Например, вот функция, которую f()вы хотите сохранить в секрете:

f <- function(x, y) {
  return(x + y)
}

Сохраните его где угодно:

save(f, file = 'C:\\Users\\Joyce\\Documents\\R\\Secret.rda')

И когда вы хотите использовать функцию:

load("C:\\Users\\Joyce\\Documents\\R\\Secret.rda")

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

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


Спасибо за предложение, это может быть одним из способов запретить другим пользователям напрямую видеть коды, еще раз спасибо.
Джойс

3
Но он появится, как только вы напечатаете f.
MAPK

4

Одна из форм зашифрованного кода реализована в petalsфункции пакета TeachingDemos.

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


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

@Joyce, petalsфункция не скрывает код, это один из примеров скрытия ключевого фрагмента кода (вы можете прочитать ключевой фрагмент?). Для шифрования (отбеливания) необходимы другие инструменты. Более простой подход обсуждается по адресу stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . Байт-компиляция тоже может помочь, но вам действительно нужно какое-то лицензионное соглашение.
Грег Сноу

3

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


3
Есть ли у нас какие-нибудь новости о компиляторах R? Я начал использовать python, и есть простые способы создания файлов exe (например, py2exe и cx_freeze). Есть ли шанс в ближайшее время увидеть что-то подобное в R?
Тони
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.