闪亮的应用程序在R:如何正确地构建它们



我创建了我的第一个Shiny应用程序,它在我的笔记本电脑上运行得很好。但是,我需要把它提交给我的教授,我想确保他能够运行它。我有一个UI文件,一个服务器文件,一个全局文件和一个进程文件。进程文件保存准备的数据。全局文件读取两个RDS文件,它们是我在服务器中使用的数据集。

  1. 我的库应该加载到哪里?例如,如果没有传单,应用程序无法运行,我如何确保库自动运行?

  2. 我的RDS文件保存到我的本地驱动器,这意味着我的教授需要改变路径才能使用它们,如何避免这种情况?

  3. 我应该把UI,服务器和全局放到一个中吗?R脚本还是可以把它们放在两个不同的脚本上?

谢谢!

  1. 当您描述当前设置时,最明显的加载库的位置是全局文件的开头。(或者在app.R的开始,如果您移动到单个文件配置。)虽然不完全是reprex包的设计目的,但您可能可以使用reprex来确保您的代码是可复制的,并且独立于您可能忽略的任何内容。(您已经发现了数据文件的明显问题。)查看这里了解更多关于reprex的信息。

  2. 。这是一个问题。如果您必须从文件中加载数据,则需要找到一种将它们提供给教授的方法。让他手工编辑你的代码并不是一个好的开始。具体如何做到这一点取决于您的机构所建立的基础设施,因此很难建议您做什么。你的课程没有共享区域吗?问问你的同学,甚至是你的教授。

  3. 无论你把应用捆绑在一个文件中还是在单独的文件中,这真的是一个选择的问题。我不认为有对错之分。对我来说,决定因素通常是应用的大小。大型应用需要几个文件。对于小型应用程序,分离只是一个不必要的复杂问题。另一个因素——这似乎不是一个问题——是我是否认为这个应用程序是一些方法论的潜在前端,可能值得它自己的软件包。在这种情况下,我将应用程序开发为前端,而将包本身开发为独立的实体。

问题1和3取决于代码质量的标准,比如性能和可维护性。当代码增长时,在一个文件中处理所有代码将变得更加困难。一旦它进一步增长,你就会遇到需要将应用拆分为模块以保持代码易于维护的情况。

关于库,我建议在应用程序的入口点声明它们(尽管,基本上,这是品味和风格的问题)。这样,你就可以最大限度地明确应用的依赖关系。同样,如果应用变得非常大,并且不是应用的所有部分都依赖于相同的包,它可以提高性能和可维护性,因为每个部分都根据需要加载包。当您不需要一次加载所有包时,它可以给您带来性能优势。然而,这可能只适用于非常大的应用。

然而,由于这一切似乎都是在大学的练习,我怀疑你的应用程序将达到更高的复杂性水平。

问题2:在一个闪亮的应用程序中,你可以提供fileInput小部件。这个问题告诉你怎么做。

最新更新