Skompilować skrypt R do samodzielnego pliku .exe?


85

Czy istnieje prosty sposób na skompilowanie mojego Rskryptu do samodzielnego .exepliku, tak jak robi to Matlab?


15
Bardzo krótka odpowiedź: nie. Nigdy.
Dirk Eddelbuettel

2
Właściwie chciałbym go rozpowszechniać, ale zachowując skrypty i algorytm w tajemnicy, czy istnieje sposób na zaszyfrowanie tego lub innego sposobu, aby osiągnąć ten cel?
Joyce


1
@Joyce, aby ukryć kod, standardowym rozwiązaniem jest dystrybucja aplikacji na serwerze. Zatem twoi użytkownicy będą łączyć się przez serwer. Nie tylko byłbyś w stanie ukryć kod, ale także Twoi użytkownicy zawsze mieliby dostęp do najbardziej aktualnej wersji. Konieczne byłoby jednak ustanowienie infrastruktury serwerowej (prawdopodobnie najlepiej użyć dostawcy chmury języka R).
Tripartio

1
Utworzenie pakietu pomogłoby w dystrybucji wspólnego kodu. Ja również szukałem możliwości stworzenia exe dla przyziemnych zadań / funkcji, obliczeń, które powtarzają się w kółko. I udostępnić plik exe osobom, które nie używają kodowania / wolą aplikację opartą na interfejsie użytkownika. Niestety wciąż szukam sposobów.
bonCodigo

Odpowiedzi:


28

Właściwie istnieje sposób na osiągnięcie rozwiązania, które spełni Twoje wymagania. Zapoznaj się z artykułem na temat wdrażania aplikacji klasycznych z R na R-Bloggerach. Jak opisano w artykule, w końcu użyjesz kilku rzeczy więcej niż jednego pliku exe.

Chciałbym również zwrócić twoją uwagę na RGtk2, przy użyciu RGtk2 możesz spróbować stworzyć własny interfejs w R. Jeśli przyjdzie Ci do głowy, ufam, że możesz spakować swój kod R razem z przenośną wersją R i zależności w jednym instalatorze i stworzeniu z niego aplikacji, co stworzyłoby iluzję jednego pliku exe.

W swoim pytaniu zapytałeś, czy łatwo jest opracować samodzielny plik wykonywalny interpretujący kod R. Nie powiedziałbym, że to łatwe. Jeśli masz silne pragnienie uruchomienia kodu R z aplikacji, możesz to zrobić w prostszy sposób, używając RCaller for Java lub R.NET .


1
Połączony artykuł na temat wprowadzania aplikacji komputerowych za pomocą R jest naprawdę dobry (używa aplikacji przenośnych i błyszczących!), Dzięki!
R Yoda

2
@RYoda Miło mi to przeczytać. Jest zainteresowanie tym tematem. Jeśli chcesz pozostać przy Shiny, ten artykuł zawiera interesujące porady dotyczące pakowania aplikacji Shiny jako aplikacji komputerowej systemu Windows.
Konrad

możliwe jest również użycie silnika skryptowego RCaller w całym javax.script API, patrz mhsatman.com/rcaller-3-0
jbytecode

11

W odpowiedzi na Twój komentarz:

Właściwie chciałbym go rozpowszechniać, ale zachowując skrypty i algorytm w tajemnicy, czy istnieje sposób na zaszyfrowanie tego lub innego sposobu, aby osiągnąć ten cel?

Możesz (w pewnym sensie) to zrobić, zapisując funkcje za pomocą save(). Na przykład, oto funkcja, f()którą chcesz zachować w tajemnicy:

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

Zapisz to gdziekolwiek:

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

A kiedy chcesz skorzystać z funkcji:

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

Zapisałbym wszystkie moje funkcje w osobnych plikach, umieściłbym je w folderze i miałbym jeden zwykły stary skrypt .R ładujący je wszystkie i wykonujący cokolwiek. Spakuj całość i rozdaj komukolwiek. Może nawet skompiluj go w pakiet. W rzeczywistości całość byłaby tylko do odczytu.

To rozwiązanie nie jest jednak świetne. Nadal możesz zobaczyć funkcję w R, wpisując nazwę funkcji, aby nie była ukryta w tym sensie. Ale jeśli otworzysz pliki .rda, ich zawartość jest zniekształcona. Wszystko zależy tak naprawdę od tego, jak doświadczeni są odbiorcy twojego kodu z R.


Dziękuję za sugestię, może być jednym ze sposobów, aby uniemożliwić innym bezpośrednie zobaczenie kodów, jeszcze raz dziękuję.
Joyce,

3
Ale pojawi się po wpisaniu f.
MAPK

4

Jedną z form posiadania zaszyfrowanego kodu zaimplementowano w petalsfunkcji pakietu TeachingDemos.

Zwróć uwagę, że znalezienie ukrytego kodu wymagałoby jedynie umiejętności programowania na poziomie średnio zaawansowanym, jednak wymaga to celowego wysiłku i użytkownik nie byłby w stanie twierdzić, że widział kod przez przypadek. Będziesz wtedy potrzebować jakiegoś rodzaju umowy licencyjnej, aby wyegzekwować wszelkie umowy o braku podglądu.


Dziękuję Greg, po prostu przyjrzałem się funkcji, o której wspomniałeś, ale nie mogę dowiedzieć się, jak jej użyć do ukrycia kodów. Czy mógłbyś omówić więcej? Dziękuję bardzo.
Joyce,

@Joyce, petalsfunkcja nie ukrywa kodu, jest to jeden z przykładów ukrywania kluczowego fragmentu kodu (czy potrafisz odczytać klucz?). Do szyfrowania (wybielania) potrzebne są inne narzędzia. Prostsze podejście omówiono pod adresem: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . Kompilacja bajtów również może pomóc, ale naprawdę potrzebujesz jakiejś umowy licencyjnej.
Greg Snow

3

Cóż, będziesz potrzebować R zainstalowanego na maszynie wdrożeniowej. Jeśli chodzi o tworzenie pliku wykonywalnego, nie jestem pewien, czy jest to możliwe. Ale możesz stworzyć inny program, który wywoła twój skrypt R. R jest językiem interpretowanym. To niemożliwe.


3
Czy mamy jakieś wiadomości na temat dowolnego kompilatora języka R? Zacząłem używać Pythona i są proste sposoby tworzenia plików exe (na przykład py2exe i cx_freeze). Czy jest szansa, że ​​wkrótce zobaczymy coś takiego w R?
Tony,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.