将R脚本编译成独立的.exe文件吗?


84

是否有任何简单的方法可以像matlab一样将R脚本编译成独立.exe文件?


14
很简短的答案:不,从来没有。
德克·埃德比布特

2
实际上,我想分发它,但要保持脚本和算法的机密性,是否可以通过加密或其他任何方式来实现此目的?
2012


1
@Joyce,为了隐藏代码,一种标准的解决方案是将应用程序分发到服务器上。因此,您的用户将通过服务器连接。您不仅可以隐藏代码,而且您的用户也始终可以访问最新版本。但是,您将需要建立服务器基础结构(可能最好使用R云提供程序)。
Tripartio

1
创建一个程序包将有助于分发通用代码。我也一直在寻找为平凡的任务/功能创建一个exe文件,计算一次又一次地重复。并与一些不使用编码/不喜欢基于UI的应用程序的人共享一个exe。不幸的是仍在寻找方法。
bonCodigo

Answers:


28

实际上,有一种方法可以实现满足您要求的解决方案。查看有关在R-Blogger上使用R部署桌面应用程序的文章。如文章中所述,最终您将使用比单个exe文件更多的东西。

此外,我想提请你注意RGtk2与使用的RGtk2你可以尝试开发R.自己的界面如果推来推去,我相信你可以用R的便携版本一起收拾你的R代码里面和依赖到一个安装程序中,并从中安装make和app,这将给单个exe文件带来错觉。

在您的问题中,您询问开发解释R代码的独立可执行文件是否容易。我不会说这很容易。如果您强烈希望从应用程序中运行R代码,则可以使用RCaller for Java或R.NET以更简单的方式进行操作


1
有关使用R来使用桌面应用程序的链接文章的确不错(使用便携式应用程序和闪亮功能!),Thx!
R Yoda

2
@RYoda我很高兴阅读。对这个主题很感兴趣。如果您想坚持使用Shiny,本文提供了有关将Shiny应用程序打包为Windows桌面应用程序的有趣建议。
Konrad

也可以在整个javax.script API中使用RCaller脚本引擎,请参阅mhsatman.com/rcaller-3-0
jbytecode

11

针对您的评论:

实际上,我想分发它,但要保持脚本和算法的机密性,是否可以通过加密或其他任何方式来实现此目的?

您可以通过使用保存功能来(某种程度上)执行此操作save()。例如,这是f()您要保密的功能:

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

保存在任何地方:

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

当您要使用该功能时:

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

我会将所有函数保存在单独的文件中,将它们放在文件夹中,并使用一个简单的旧.R脚本将所有函数加载到其中并执行任何操作。将整个内容压缩并分发给任何人。甚至可以将其编译成一个包。实际上,整个事情那时将是只读的。

这个解决方案不是很好。您仍然可以通过输入函数名称在R中看到该函数,这样就不会隐藏该函数了。但是,如果您打开.rda文件,则它们的内容都是乱码。这完全取决于您的代码接收者对R的经验。


谢谢您的建议,可以作为防止他人直接看到代码的一种方法,再次感谢。
乔伊斯

3
但是,一旦您键入它将出现f
MAPK

4

petalsTeachingDemos软件包中的功能中实现了一种具有加密代码的形式。

注意,只需要中级编程技能就能找到隐藏的代码,但是,这确实需要花大力气,并且用户将无法声称偶然看到了该代码。然后,您将需要某种类型的许可协议来强制执行任何禁止窥视协议。


谢谢格雷格,我只是研究了您提到的功能,但无法弄清楚如何使用它来隐藏代码,请您详细介绍一下?
乔伊斯

@Joyce,该petals函数不会隐藏代码,这是隐藏一个关键代码段的一个示例(您可以读取该关键段吗?)。需要其他工具进行加密(漂白)。在stat.ethz.ch/pipermail/r-devel/2011-October/062236.html上讨论了一种更简单的方法。字节编译也可能有帮助,但是您确实需要某种类型的许可协议。
格雷格·斯诺

3

好了,您将需要在部署计算机上安装R。至于制作可执行文件,我不确定是否可行。但是您可以创建另一个程序来调用您的R脚本。R是一种解释性语言。这不可能。


3
关于R编译器,我们有什么消息吗?我开始使用python,并且有简单的方法来生成exe文件(例如py2exe和cx_freeze)。有没有机会很快在R中看到类似的内容?
托尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.