我正在尝试为我的CRAN包制作一些GUI
- 一些
f
函数,它在本地启动一个弹出窗口,其中一些参数呈现一些输出,就像在本地启动简单的闪亮应用程序一样 - 弹出允许容易地选择参数;验证";按钮触发所选参数的
f
的返回,如stopApp的闪亮
我已经用闪亮的做了,但我认为结果有点不令人满意,因为闪亮的应用程序启动和停止都很慢(我想如果有对象要序列化的话(。
我看到一些包,比如vdiffr,似乎通过列出要更改的对象来解决这个问题,因此它们只启动一次闪亮的程序,用一些选择器来更改所有内容。如果可能的话,我想避免这种解决方案。
所以问题是:有没有比Shiny更方便的GUI框架(只有本地、快速启动和快速返回(?或者一些很好的方法来做到这一点,那就足够轻了(我不想让我的包裹对于一个小弹出窗口来说变得特别重(?
以下是R附带的GUI功能(不需要包(:
(1( 对于足够简单的应用程序,可以使用select.list
、menu
、readline
、file.choose
和choose.dir
,并且将根据用户所处的环境呈现文本或图形用户界面。这些都配有R,启动速度非常快,而且易于编程。查看这些命令的帮助页面并尝试:
select.list(c("oranges", "apples", "pears"))
menu(c("oranges", "apples", "pears"))
readline("Enter name of fruit: ")
choose.dir()
file.choose()
(2( tcltk包是一种可能的用户界面,它能够像闪亮一样复杂。它带有R,因此不需要安装。它只需要使用library
语句来加载。(如果用户从源代码构建R,则可以在没有tcltk功能的情况下构建它,但在99%的情况下都会存在tcltk(。
这里有几个使用tcltk的R源代码的简短示例:https://www.stat.berkeley.edu/~s133/Gui-a.html,在James Wettenhall的网站上还有很多例子,人们可以运行Rcmdr R包来查看复杂的tcltk用户界面的例子,尽管由于Rcmdr的大尺寸,运行它比简单的应用程序需要更长的加载时间。
因为tcltk是R本身的一部分,所以它没有CRAN页面,但对于使用tcltk的其他包,请在其CRAN页面底部查看tcltk2包的反向依赖关系,因为任何依赖它的包也必须使用tcltk。
这实际上取决于您的编码知识。然而,我的第一个方法是尝试改进你闪亮的应用程序。为此,您可以使用profvis
软件包来检查为什么您闪亮的应用程序速度缓慢。如果你决定和Shiny在一起,有很多方法可以减少Shiny的开始时间。然而,如果你得出的结论是,你真的想把闪亮的东西扔到船外,那么你应该考虑使用JavaScript。
- 要么用纯JavaScript编写完整的应用程序
- 或者您可以在Shiny中使用JavaScript(例如r2d3(
当然还有其他方法,比如@Pork Chop提到的使用rmarkdown
或普通markdown
。