2012-12-31 17 views
54

Czy istnieje prosty sposób na skompilowanie mojego skryptu R w samodzielny plik .exe, tak jak to robi program matlab?Skompiluj skrypt R w samodzielny plik .exe?

+8

Bardzo krótka odpowiedź: Nie. Nigdy nie było. –

+1

Właściwie chciałbym go przekazać, ale zachować tajne skrypty i algorytmy, czy istnieje sposób na zaszyfrowanie tego lub w jakikolwiek inny sposób, aby osiągnąć ten cel? – Joyce

+2

Wiele dyskusji na http://stackoverflow.com/questions/4707276/encrypting-r-script-under-ms-windows –

Odpowiedz

4

Będziesz potrzebował R zainstalowanego na komputerze zdalnym. Jeśli chodzi o tworzenie pliku wykonywalnego, nie jestem pewien, czy 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.

+1

Czy mamy jakieś wiadomości na temat dowolnego kompilatora R? Zacząłem używać Pythona i istnieją proste sposoby na tworzenie plików exe (py2exe i cx_freeze na przykład). Czy jest jakaś szansa na zobaczenie czegoś takiego w R wkrótce? – Tony

8

W odpowiedzi na Twój komentarz:

Właściwie chciałbym go ale utrzymanie skrypty i algorytm tajemnicy distribe, czy istnieje sposób, aby zaszyfrować ten lub inny sposób osiągnąć ten cel?

Można (sortować) zrobić, zapisując funkcje za pomocą save(). Na przykład, oto funkcja f() chcesz zachować tajemnicę:

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

zapisz go gdziekolwiek:

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

A gdy chcesz korzystać z funkcji:

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

chciałbym zaoszczędzić wszystkie moje funkcje w osobnych plikach, umieszczam je w folderze i mam jeden zwykły stary skrypt .R ładując je wszystkie i wykonując cokolwiek. Rozpakuj całość i rozdaj je komukolwiek. Może nawet skompiluj go w pakiet. W efekcie cała sprawa byłaby tylko do odczytu.

To rozwiązanie nie jest jednak wspaniałe. 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 od tego, jak doświadczeni są odbiorcy twojego kodu z R.

+0

Dziękuję za sugestię, może to być jeden ze sposobów, aby uniemożliwić innym bezpośredni dostęp do kodów, dzięki jeszcze raz. – Joyce

+1

Co powiesz na zapisanie całego obszaru roboczego jako obrazu? –

4

Jedna z postaci zaszyfrowanego kodu jest zaimplementowana w funkcji petals w pakiecie TeachingDemos.

Należy pamiętać, że wykrycie ukrytego kodu wymagałoby jedynie umiejętności programistycznych na poziomie średniozaawansowanym, jednak nie wymaga on, aby użytkownik zobaczył kod przez przypadek. Będziesz wtedy potrzebował jakiegoś rodzaju umowy licencyjnej w celu egzekwowania wszelkich umów bez podglądania.

+0

Dziękuję Greg, po prostu zaglądam do funkcji, o której wspomniałeś, ale nie możesz wymyślić, jak użyć tego do ukrycia kodów, czy mogłabyś uprzejmie opracować więcej? Dziękuję bardzo. – Joyce

+0

@Joyce, funkcja 'petals' nie ukrywa kodu, jest to jeden z przykładów ukrytego ukrytego klucza (czy możesz przeczytać kluczowy fragment?). Do szyfrowania potrzebne są inne narzędzia. Prostsze podejście omówiono na stronie: https://stat.ethz.ch/pipermail/r-devel/2011-October/062236.html. Kompilowanie bajtów może również pomóc, ale naprawdę potrzebujesz jakiegoś rodzaju umowy licencyjnej. –

21

W rzeczywistości istnieje sposób na rozwiązanie, które spełni Twoje wymagania. Spójrz na artykuł o wdrażaniu Desktop Apps with R na R-Bloggers. Jak wyszczególniono w artykule, skończy się używanie kilku dodatkowych rzeczy niż pojedynczy plik exe.

Chciałbym również zwrócić Państwa uwagę na RGtk2 przy pomocy RGtk2 można próbować rozwijać swój własny interfejs w R. Jeśli dojdzie do pchnięcia, ufam, że możesz spakować swój kod R razem z przenośnym wersja R i zależności w jeden instalator i make i app z tego, co tworzy iluzję jednego pliku exe.

W pytaniu zadał pytanie, czy jest to łatwe opracowanie samodzielnego kodu interpretującego plik wykonywalny pliku. 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 dla Java lub R.NET.

+1

Połączony artykuł na temat używania aplikacji komputerowych z R jest naprawdę dobry (używa aplikacji przenośnych i błyszczący!), Thx! –

+2

@RYoda Miło mi to przeczytać. Zainteresowanie tym tematem. Jeśli chcesz pozostać przy Shiny, [ten artykuł] (http://blog.analytixware.com/2014/03/packaging-your-shiny-app-as-windows.html) dostarcza ciekawych porad dotyczących pakowania Shiny App jako aplikacja pulpitu Windows. – Konrad

+0

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