En realidad, me gustaría distribuirlo, pero manteniendo los scripts y el algoritmo en secreto, ¿hay alguna manera de cifrar eso o de alguna otra manera para lograr este propósito?
@Joyce, para ocultar el código, una solución estándar es distribuir la aplicación en un servidor. Entonces, sus usuarios se conectarían a través del servidor. No solo podrá ocultar el código, sino que sus usuarios siempre tendrán acceso a la versión más actualizada. Sin embargo, necesitaría establecer una infraestructura de servidor (probablemente sea mejor utilizar un proveedor de nube R).
Tripartio
1
Crear un paquete ayudaría a distribuir el código común. Yo también he estado buscando crear un exe para tareas / funciones mundanas, cálculos que se repiten una y otra vez. Y compartir un exe con algunos que no usan codificación / prefieren una aplicación basada en UI. Lamentablemente sigo buscando formas.
bonCodigo
Respuestas:
28
De hecho, existe una forma de lograr una solución que satisfaga sus necesidades. Eche un vistazo al artículo sobre Implementación de aplicaciones de escritorio con R en R-Bloggers. Como se detalla en el artículo, terminará usando algunas cosas más que un solo archivo exe.
También me gustaría llamar su atención sobre el RGtk2 con el uso del RGtk2 , podría intentar desarrollar su propia interfaz en R. Si las cosas se complican , confío en que pueda empaquetar su código R junto con una versión portátil de R y dependencias en un instalador y marca y aplicación a partir de eso, eso crearía la ilusión de un solo archivo exe.
En su pregunta, preguntó si es fácil desarrollar un archivo ejecutable independiente que interprete el código R. No diría que es fácil. Si tiene un gran deseo de ejecutar un código R desde una aplicación, puede hacerlo de una manera más simple usando RCaller para Java o R.NET .
El artículo vinculado sobre la implementación de aplicaciones de escritorio con R es realmente bueno (¡usa aplicaciones portátiles y brillantes!), ¡Gracias!
R Yoda
2
@RYoda Me alegra leer eso. Hay interés en este tema. Si desea seguir con Shiny, este artículo proporciona consejos interesantes sobre cómo empaquetar una aplicación Shiny como una aplicación de escritorio de Windows.
Konrad
También es posible utilizar el motor de secuencias de comandos RCaller en toda la API javax.script, consulte mhsatman.com/rcaller-3-0
jbytecode
11
En respuesta a tu comentario:
En realidad, me gustaría distribuirlo, pero manteniendo los scripts y el algoritmo en secreto, ¿hay alguna manera de cifrar eso o de alguna otra manera para lograr este propósito?
Puede (más o menos) hacer esto guardando funciones usando save(). Por ejemplo, aquí hay una función f()que desea mantener en secreto:
Guardaría todas mis funciones en archivos separados, las pondría en una carpeta y tendría un script .R simple y simple cargándolas todas y ejecutando lo que sea. Ciérralo todo y distribúyelo a quien sea. Quizás incluso compílelo en un paquete. Efectivamente, entonces todo sería de solo lectura.
Sin embargo, esta solución no es tan buena. Todavía puede ver la función en R escribiendo el nombre de la función para que no esté oculta en ese sentido. Pero si abre los archivos .rda, su contenido se distorsiona. Todo depende realmente de la experiencia que tengan los destinatarios de su código con R.
Gracias por la sugerencia, puede ser una forma de evitar que otros vean directamente los códigos, gracias nuevamente.
Joyce
3
Pero aparecerá una vez que escriba f.
MAPK
4
Una forma de tener código encriptado se implementa en la petalsfunción en el paquete TeachingDemos.
Tenga en cuenta que solo se necesitarían habilidades de programación de nivel intermedio para encontrar el código oculto, sin embargo, requiere un esfuerzo deliberado y el usuario no podría afirmar haber visto el código por accidente. Luego, necesitaría algún tipo de acuerdo de licencia para hacer cumplir cualquier acuerdo de no mirar.
Gracias Greg, solo miro la función que mencionaste, pero no puedo entender cómo usarla para ocultar los códigos, ¿podrías explicarme más? Muchas gracias.
Joyce
@Joyce, la petalsfunción no oculta el código, es un ejemplo de tener una pieza clave de código oculta (¿puedes leer la pieza clave?). Se necesitan otras herramientas para realizar el cifrado (blanqueo). Un enfoque más simple se discute en: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . La compilación de bytes también puede ayudar, pero realmente necesita algún tipo de acuerdo de licencia.
Greg Snow
3
Bueno, necesitará R instalado en la máquina de implementación. En cuanto a hacer un ejecutable, no estoy seguro de que sea posible. Pero puede crear otro programa que invoque su script R. R es un idioma interpretado. No es posible.
¿Tenemos novedades sobre algún compilador de R? Comencé a usar Python y hay formas fáciles de producir archivos exe (py2exe y cx_freeze, por ejemplo). ¿Hay alguna posibilidad de ver algo como esto en R pronto?
Respuestas:
De hecho, existe una forma de lograr una solución que satisfaga sus necesidades. Eche un vistazo al artículo sobre Implementación de aplicaciones de escritorio con R en R-Bloggers. Como se detalla en el artículo, terminará usando algunas cosas más que un solo archivo exe.
También me gustaría llamar su atención sobre el RGtk2 con el uso del RGtk2 , podría intentar desarrollar su propia interfaz en R. Si las cosas se complican , confío en que pueda empaquetar su código R junto con una versión portátil de R y dependencias en un instalador y marca y aplicación a partir de eso, eso crearía la ilusión de un solo archivo exe.
En su pregunta, preguntó si es fácil desarrollar un archivo ejecutable independiente que interprete el código R. No diría que es fácil. Si tiene un gran deseo de ejecutar un código R desde una aplicación, puede hacerlo de una manera más simple usando RCaller para Java o R.NET .
fuente
En respuesta a tu comentario:
Puede (más o menos) hacer esto guardando funciones usando
save()
. Por ejemplo, aquí hay una funciónf()
que desea mantener en secreto:f <- function(x, y) { return(x + y) }
Guárdelo donde sea:
save(f, file = 'C:\\Users\\Joyce\\Documents\\R\\Secret.rda')
Y cuando quieras usar la función:
load("C:\\Users\\Joyce\\Documents\\R\\Secret.rda")
Guardaría todas mis funciones en archivos separados, las pondría en una carpeta y tendría un script .R simple y simple cargándolas todas y ejecutando lo que sea. Ciérralo todo y distribúyelo a quien sea. Quizás incluso compílelo en un paquete. Efectivamente, entonces todo sería de solo lectura.
Sin embargo, esta solución no es tan buena. Todavía puede ver la función en R escribiendo el nombre de la función para que no esté oculta en ese sentido. Pero si abre los archivos .rda, su contenido se distorsiona. Todo depende realmente de la experiencia que tengan los destinatarios de su código con R.
fuente
f
.Una forma de tener código encriptado se implementa en la
petals
función en el paquete TeachingDemos.Tenga en cuenta que solo se necesitarían habilidades de programación de nivel intermedio para encontrar el código oculto, sin embargo, requiere un esfuerzo deliberado y el usuario no podría afirmar haber visto el código por accidente. Luego, necesitaría algún tipo de acuerdo de licencia para hacer cumplir cualquier acuerdo de no mirar.
fuente
petals
función no oculta el código, es un ejemplo de tener una pieza clave de código oculta (¿puedes leer la pieza clave?). Se necesitan otras herramientas para realizar el cifrado (blanqueo). Un enfoque más simple se discute en: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . La compilación de bytes también puede ayudar, pero realmente necesita algún tipo de acuerdo de licencia.Bueno, necesitará R instalado en la máquina de implementación. En cuanto a hacer un ejecutable, no estoy seguro de que sea posible. Pero puede crear otro programa que invoque su script R. R es un idioma interpretado. No es posible.
fuente