R betiğini bağımsız bir .exe dosyasına derlemek?


87

Matlab'ın yaptığı gibi betiğimi Rbağımsız bir .exedosyada derlemenin kolay bir yolu var mı ?


15
Çok kısa cevap: Hayır. Hiç olmadı.
Dirk Eddelbuettel

2
Aslında onu dağıtmak istiyorum, ancak komut dosyalarını ve algoritmayı gizli tutmak, bunu şifrelemenin bir yolu veya bu amaca ulaşmak için başka bir yol var mı?
Joyce


1
@ Joyce, kodu gizlemek için standart bir çözüm, uygulamayı bir sunucuya dağıtmaktır. Yani kullanıcılarınız sunucu üzerinden bağlanır. Yalnızca kodu gizlemekle kalmazsınız, aynı zamanda kullanıcılarınız da her zaman en güncel sürüme erişebilir. Ancak, sunucu altyapısı kurmanız gerekir (muhtemelen en iyisi bir R bulut sağlayıcısı kullanmaktır).
Tripartio

1
Bir paket oluşturmak, ortak kodun dağıtılmasına yardımcı olur. Ben de sıradan görevler / işlevler için bir exe oluşturmaya çalışıyordum, tekrar tekrar tekrar eden hesaplamalar. Ve kodlama kullanmayan / UI tabanlı bir uygulamayı tercih edenlerle bir exe paylaşmak. Ne yazık ki hala yollar arıyor.
bonCodigo

Yanıtlar:


28

Aslında gereksinimlerinizi karşılayacak bir çözüme ulaşmanın bir yolu var. R-Blogger'larda R ile Masaüstü Uygulamalarını Dağıtma hakkındaki makaleye bir göz atın . Makalede detaylandırıldığı gibi, sonunda tek bir exe dosyasından birkaç şey daha kullanacaksınız.

Ayrıca, RGtk2'yi kullanarak RGtk2'ye dikkatinizi çekmek isterim , R'de kendi arayüzünüzü geliştirmeyi deneyebilirsiniz. Eğer itme dürtmek için gelirse, R kodunuzu taşınabilir bir R ve bağımlılıkları tek bir yükleyiciye ve ondan yapıp uygulama, bu da tek bir exe dosyasının yanılsamasını yaratır.

Sorunuzda, R kodunu yorumlayan bağımsız bir yürütülebilir dosya geliştirmenin kolay olup olmadığını sordunuz . Kolay olduğunu söyleyemem. Bir uygulamadan bir R kodu çalıştırmak için güçlü bir isteğiniz varsa, bunu Java veya R.NET için RCaller kullanarak daha basit bir şekilde yapabilirsiniz .


1
R ile masaüstü uygulamaları dağıtma hakkındaki bağlantılı makale gerçekten çok iyi (taşınabilir uygulamalar kullanıyor ve parlak!), Thx!
R, Yoda

2
@RYoda Bunu okuduğuma sevindim. Bu konuya ilgi var. Shiny'a bağlı kalmak istiyorsanız, bu makale Shiny Uygulamasını Windows Masaüstü Uygulaması olarak paketlemeye ilişkin ilginç tavsiyeler sunar.
Konrad

javax.script API'sinde RCaller komut dosyası oluşturma motorunu kullanmak da mümkündür, bkz. mhsatman.com/rcaller-3-0
jbytecode

11

Yorumunuza yanıt olarak:

Aslında onu dağıtmak istiyorum ama komut dosyalarını ve algoritmayı gizli tutmak, bunu şifrelemenin bir yolu veya bu amaca ulaşmak için başka bir yol var mı?

Bunu kullanarak işlevleri kaydederek (bir sıralama) yapabilirsiniz save(). Örneğin, işte f()gizli tutmak istediğiniz bir işlev :

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

Her yere kaydedin:

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

Ve işlevi kullanmak istediğinizde:

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

Tüm işlevlerimi ayrı dosyalara kaydeder, bir klasöre koyardım ve hepsini yükleyen ve her şeyi çalıştıran bir düz eski .R betiğine sahip olurdum. Her şeyi sıkıştırın ve herkese dağıtın. Hatta onu bir paket halinde derleyin. Etkili bir şekilde her şey salt okunur olacaktı.

Bu çözüm o kadar da harika değil. İşlevin adını yazarak, bu anlamda gizli kalmaması için işlevi yine de R'de görebilirsiniz. Ancak .rda dosyalarını açarsanız, içerikleri bozuktur. Her şey gerçekten kodunuzun alıcılarının R konusunda ne kadar deneyimli olduğuna bağlıdır.


Öneriniz için teşekkür ederiz, başkalarının kodları doğrudan görmesini engellemenin bir yolu olabilir, tekrar teşekkürler.
Joyce

3
Ancak yazdıktan sonra görünecektir f.
MAPK

4

Şifrelenmiş koda sahip olmanın bir biçimi petals, TeachingDemos paketindeki işlevde uygulanmaktadır .

Gizli kodu bulmak için sadece orta seviye programlama becerileri gerektiğini, ancak kasıtlı bir çaba gerektirdiğini ve kullanıcının kodu kazara gördüğünü iddia edemeyeceğini unutmayın. Daha sonra herhangi bir gözetleme anlaşmasının uygulanmaması için bir tür lisans anlaşmasına ihtiyacınız olacaktır.


Teşekkürler Greg, sadece bahsettiğin fonksiyona baktım, ama bunu kodları gizlemek için nasıl kullanacağımı çözemiyorum, lütfen biraz daha detaylandırır mısın? Çok teşekkürler.
Joyce

@ Joyce, petalsişlev kodu gizlemez, gizli bir kod parçasına sahip olmanın bir örneğidir (anahtar parçayı okuyabilir misiniz?). Şifreleme (ağartma) için başka araçlara ihtiyaç vardır. Stat.ethz.ch/pipermail/r-devel/2011-October/062236.html adresinde daha basit bir yaklaşım tartışılmaktadır . Bayt derleme de yardımcı olabilir, ancak gerçekten bir tür lisans sözleşmesine ihtiyacınız var.
Greg Snow

3

Peki, dağıtım makinesinde R'nin kurulu olmasına ihtiyacınız olacak. Bir yürütülebilir dosya yapmaya gelince, bunun mümkün olduğundan emin değilim. Ancak R betiğinizi çağıran başka bir program oluşturabilirsiniz. R yorumlanmış bir dildir. Mümkün değil.


3
Herhangi bir R derleyicisinden haberimiz var mı? Python kullanmaya başladım ve exe dosyalarını oluşturmanın kolay yolları var (örneğin py2exe ve cx_freeze). Yakında R'de böyle bir şey görme şansı var mı?
Tony
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.