Скомпілювати скрипт 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.