Compilar o script R em um arquivo .exe autônomo?


87

Existe alguma maneira fácil de compilar meu Rscript em um .exearquivo autônomo, assim como o matlab faz?


15
Resposta muito curta: Não. Nunca foi.
Dirk Eddelbuettel

2
Na verdade eu gostaria de distribuí-lo, mas mantendo os scripts e algoritmos em segredo, existe uma maneira de criptografar isso ou alguma outra forma de atingir esse propósito?
Joyce


1
@Joyce, para ocultar o código, uma solução padrão é distribuir o aplicativo em um servidor. Assim, seus usuários se conectariam via servidor. Você não apenas conseguiria ocultar o código, mas seus usuários também sempre teriam acesso à versão mais atualizada. No entanto, você precisaria estabelecer uma infraestrutura de servidor (provavelmente melhor usar um provedor de nuvem R).
Tripartio

1
Criar um pacote ajudaria a distribuir o código comum. Eu também estou procurando criar um exe para tarefas / funções mundanas, cálculos que se repetem continuamente. E para compartilhar um exe com alguns que não usam codificação / preferem um aplicativo baseado em IU. Infelizmente, ainda estou procurando maneiras.
bonCodigo

Respostas:


28

Na verdade, existe uma maneira de obter uma solução que atenda às suas necessidades. Dê uma olhada no artigo sobre Implementação de aplicativos de área de trabalho com R no R-Bloggers. Conforme detalhado no artigo, você acabará usando mais algumas coisas do que um único arquivo exe.

Também gostaria de chamar sua atenção para o RGtk2 com o uso do RGtk2, você poderia tentar desenvolver sua própria interface em R. Se o impulso for necessário, espero que você possa empacotar seu código R junto com uma versão portátil de R e dependências em um instalador e fazer um aplicativo a partir dele, que criaria uma ilusão de um único arquivo exe.

Em sua pergunta, você perguntou se é fácil desenvolver um arquivo executável autônomo interpretando o código R. Eu não diria que é fácil. Se você deseja muito executar um código R a partir de um aplicativo, pode fazê-lo de maneira mais simples usando RCaller para Java ou R.NET .


1
O artigo com link sobre desenvolver aplicativos de desktop com R é realmente bom (usa aplicativos portáteis e brilhantes!), Thx!
R Yoda

2
@RYoda, fico feliz em ler isso. Há interesse neste assunto. Se você quiser continuar com o Shiny, este artigo fornece conselhos interessantes sobre como empacotar um aplicativo Shiny como um aplicativo de área de trabalho do Windows.
Konrad

também é possível usar o mecanismo de script RCaller em toda a API javax.script, consulte mhsatman.com/rcaller-3-0
jbytecode

11

Em resposta ao seu comentário:

Na verdade eu gostaria de distribuí-lo, mas mantendo os scripts e o algoritmo em segredo, existe uma maneira de criptografar isso ou alguma outra maneira de atingir esse propósito?

Você pode (mais ou menos) fazer isso salvando funções usando save(). Por exemplo, aqui está uma função que f()você deseja manter em segredo:

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

Salve onde quiser:

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

E quando você quiser usar a função:

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

Gostaria de salvar todas as minhas funções em arquivos separados, colocá-los em uma pasta e ter um velho script .R carregando todos eles e executando o que quer. Compacte a coisa toda e distribua para quem quiser. Talvez até mesmo compilá-lo em um pacote. Efetivamente, a coisa toda seria somente para leitura.

Esta solução não é tão boa assim. Você ainda pode ver a função em R digitando o nome da função para que não fique oculto nesse sentido. Mas se você abrir os arquivos .rda, o conteúdo deles ficará todo distorcido. Tudo depende realmente da experiência dos destinatários do seu código com R.


Obrigado pela sugestão, pode ser uma forma de evitar que outras pessoas vejam diretamente os códigos, obrigado novamente.
Joyce

3
Mas ele aparecerá quando você digitar f.
MAPK de

4

Uma forma de ter código criptografado é implementada na petalsfunção do pacote TeachingDemos.

Observe que seriam necessárias apenas habilidades de programação de nível intermediário para localizar o código oculto; no entanto, é necessário um esforço deliberado e o usuário não poderia alegar ter visto o código por acidente. Você então precisaria de algum tipo de contrato de licença para fazer cumprir quaisquer acordos de não exibição.


Obrigado Greg, acabei de examinar a função que você mencionou, mas não consigo descobrir como usá-la para ocultar os códigos, você poderia gentilmente explicar mais? Muito obrigado.
Joyce

@Joyce, a petalsfunção não oculta o código, é um exemplo de como uma peça chave do código está oculta (você consegue ler a peça chave?). Outras ferramentas são necessárias para fazer a criptografia (branqueamento). Uma abordagem mais simples é discutida em: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . A compilação de bytes também pode ajudar, mas você realmente precisa de algum tipo de contrato de licença.
Greg Snow

3

Bem, você vai precisar do R instalado na máquina de implantação. Quanto a fazer um executável, não tenho certeza se isso é possível. Mas você pode criar outro programa que invoque seu script R. R é uma linguagem interpretada. Não é possível.


3
Temos novidades sobre algum compilador R? Comecei a usar o python e existem maneiras fáceis de produzir arquivos exe (py2exe e cx_freeze, por exemplo). Existe alguma chance de ver algo assim no R em breve?
Tony
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.