太长不看
Rlinguo
是一个创新的手机应用,在后台用 R 来处理其业务处理逻辑。
现在可以下载了,
没错,你没看错,未来其实已经到来,你真的可以在手机上运行R了。
从前……我已经用R开发网页应用有一段时间了——可能比我愿意承认的时间还要长。在ThinkR,我们已经开发了 {shiny}
应用程序有一段时间了,从小工具到大型仪表盘,这些应用被研究人员和银行家使用。但我们的网络开发不仅限于 {shiny}
。我们也创建了 REST API,flex/quarto 仪表盘,以及用 R 生成的动态文件。在过去的几年里,我们探索了各种交付数据产品给客户的方式,主要通过 {shiny}
应用程序,但也通过其他格式。在这些不同的格式中,有一个平台始终让我们难以触及:移动。是的,{shiny}
应用可以进行移动设备优化,而 JavaScript 仪表盘在手机上也能很好地显示。然而,它们并不是原生的移动应用程序。它们无法从应用商店安装,也无法访问手机的 API,让它们支持离线工作也是一项巨大的挑战。
shiny
"{shiny}
在手机上运行"一直是我们的一些客户长时间以来的持续请求。这很好理解:你可能有一个很棒的模型或高效的数据处理流程,而你需要让人们能够通过他们的智能手机访问它——甚至在没有蜂窝网络信号的森林里(是的,这是我们客户实际提出的一个请求)。我们通常的回答是:“抱歉,这不可能。” {shiny}
依赖于服务器,由于R不能直接在手机上执行,因此需要一个远程服务器。这意味着你必须有互联网连接。而且,你不能通过应用商店发布它。然而,在最近几个月中,一个新的东西出现了——这是R爱好者多年来梦寐以求的功能:R被编译成WebAssembly。如果你还不了解WebAssembly,可以将其视为一种在JavaScript中运行R的方法。如果你已经了解它,那么你知道它其实更复杂一些。这个新工具叫做webR
。
我已经用webR
进行了几个月的实验,主要从Node.js的角度来看。在这段时间里,我开发了两个工具,webrcli
和spidyr
,它们专门用于结合R和Node.js的项目。尽管这些工具有可能彻底改变应用程序的开发,但它们仍然依赖于远程的网络方法:R运行在服务器上的一个Node.js进程中。这意味着目前还没有离线功能,无法在应用商店中部署,也没有原生的移动应用功能。今年夏天,我们又收到了一个新的请求:“希望将 {shiny}
作为原生移动应用。”就在我们准备给出标准回答时,我有了一个“如果我们可以将webR
用于创建移动应用的JavaScript框架,会怎样?”的想法。带着这个想法,我们制作了一个概念验证(PoC):一个可以运行一条R代码的移动应用。这种全功能的应用以前从未实现过,但我们相信它是可以做到的。不幸的是,客户最终没有继续这个项目。开发移动应用需要的技能超出了典型的 {shiny}
开发者的范围,他们需要一种可以独立维护的软件。尽管如此,我们决定基于已有PoC全力以赴,开发一个完整的应用——一个用户友好、略带趣味,并且可以通过应用商店发布的应用,以此证明这确实是可行的。接下来的几周,ThinkR 的团队将这一愿景变为现实。Margot 确定了项目的方向,并撰写了概念文件(关于这点的更多内容将在未来的博客文章中介绍),Arthur 使用 Excalidraw 和 Figma 制作了应用的原型,展示了他出色的UI技能,而我(Colin)则专注于后端开发(因为我在这方面的能力还有待提高,前端工作也不是我的强项)。这个激动人心的旅程的结果是 Rlinguo,一款可以运行R的原生移动应用。是的,你没有看错——R现在可以在你的手机上运行,而这款应用正是从概念验证到现实的转变。
Rlinguo 是一个既有趣又有点古怪的游戏,挑战用户去辨认给定的 R 函数属于哪个包。诚然,这可能不是最实用的技能——知道 mean()
在 {base}
包中,而 median()
在 {stats}
包中,这并不一定让你成为更好的程序员(尽管我必须承认,它们分属不同的包这让我有点不爽)。这款应用的主要目的是证明原生移动应用利用 R 的能力不仅可行,而且可以为更广泛的应用铺路。这款应用展示了几个很酷的功能:
- R 指尖上的功能,口袋里的力量: 该应用以多种方式展示了 R 的功能,例如从已安装的包列表中执行
sample()
函数,以及从导出的函数列表中执行sample()
函数。在关于页面上,用户甚至可以执行runif()
函数以确认 Rlinguo 实际在背后运行 R。 - 离线功能: Rlinguo 设计为无需互联网连接即可工作,使用户能够在智能手机上部署 R 模型,即使在偏远地区也能使用。
- 支持真正的数据科学工作流: Rlinguo 重现了典型的数据科学工作流程。数据存储在本地 SQL 数据库中,通过查询、在 R 中处理(如计数和透视)后,再返回给 JavaScript 进行可视化。结果?一个用户友好的数据可视化界面。
- 集成 R 包: 该应用创造性地使用了 R 包。当你正确猜出一个函数时,会收到
praise::praise()
的消息;如果你错了,一个自定义函数会提供反馈(不过目前还没有专门提供鼓励词的包)。 - 提供出色的用户体验: Rlinguo 致力于提升可用性,弥补了工具中常见的短板。目标是打造一个更加精致且使用愉快的应用。
- 将基于 R 的应用部署到应用商店: Rlinguo 证明了完全有可能创建一个由 R 驱动的移动应用,并将其发布到主要的应用商店。
Rlinguo您现在可以在苹果App Store和Google Play上下载。我们认为这是新一轮创新的开始,借用一句流行语,“宝贝,你从未有过这样的感觉。”
你有具体的使用情况吗?在手机上运行 R 的想法一直很受客户欢迎——有各种各样的可能。你需要这个功能吗?你有没有在手机上使用 R 的好例子?太好了,我们来聊聊吧!
注:
(*) 我们在App Store上找到了两个含有webR
的应用,但这些应用似乎主要是用来包装JavaScript集成开发环境(IDE),并没有达到我们的目标:开发一个使用R作为核心逻辑的真正移动应用。
由于没有提供源文本和翻译内容来审核和改进,因此无法进行编辑。请提供需要反馈的源文本及其初始翻译。
共同学习,写下你的评论
评论加载中...
作者其他优质文章