Скомпілювати скрипт R у самостійний файл .exe?


85

Чи є якийсь простий спосіб скомпілювати мій Rсценарій у самостійний .exeфайл так само, як це робить Matlab?


15
Дуже коротка відповідь: Ні. Ніколи не було.
Dirk Eddelbuettel

2
Насправді я хотів би розподілити його, але, зберігаючи сценарії та алгоритм в таємниці, чи є спосіб зашифрувати той чи інший спосіб досягнення цієї мети?
Джойс,

2
Велике обговорення на stackoverflow.com/questions/4707276 / ...
Бен Bolker

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

1
Створення пакету допомогло б розповсюдити загальний код. Я теж шукав створення exe для повсякденних завдань / функцій, calcs, які повторюються знову і знову. І поділитися 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 App як настільної програми 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.