R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]

Posted

技术标签:

【中文标题】R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]【英文标题】:R + Shiny which hammer? straight Shiny, flexdashboard or shinydashboard? [closed] 【发布时间】:2016-10-25 19:39:18 【问题描述】:

冒着被mods "too broad a question" hammer 击中的风险,我想问一下,鉴于出现了大量的交互式 R Shiny 工具和包,你什么时候使用哪一个?

    Shiny - 对我来说,唯一的缺点是您的项目需要从闪亮的服务器上运行,但似乎是最佳选择。

    shinydashboard - 闪亮但有用于标注的漂亮值框。

    flexdashboard - 把它写在 Rmd.直接 Shiny 没有给你带来什么?如果您乐于传递数据,也许对通过电子邮件发送给客户有用?我一直在玩flexdashboard,但它无法使用数据表(库(DT))让我觉得它需要更多的迭代。

查看其他答案,asking this question中我并不孤单。

创作者提供了许多画廊来展示他们的软件包/方法,但您怎么知道该走哪条路?

使用其中一种的明显优势是什么?

【问题讨论】:

您的输入和预期输出是什么?开玩笑的人。这是一个有用的问题,有望产生一些好的答案。 好吧@cory 我已经投了一个反对票,所以猴子锤子正在工作。我希望 SO 会更担心减少重复的学生作业问题,而不是像这样的大师可以分享他们经验的主题...... 如果您想将应用部署到服务器(不仅仅是在 RStudio 中运行),我相信您需要 Shiny Server 来提供所有选项。 你应该能够在另一个选项中使用有用的元素,因为它们都基于 R/Shiny/RMarkdown。使用哪一个取决于您想要实现的目标:显示更多静态内容的仪表板?需要定期更新的报告?人们可以在其中更改大量参数的交互式应用程序? 感谢@warmoverflow 的想法。理想情况下,一旦用户获得他们想要的洞察力,我想要一个带有漂亮打印报告按钮的交互式仪表板。 【参考方案1】:

需要做出细微差别。交互性不一定需要在其背后运行代码的服务器。可以使用嵌入式 javascript 提供交互性,该 JavaScript 将在客户端执行(如 plotly、highcharts、leaflet 等)。所以如果我们不使用“交互性”这个词,而是明确地描述交互性,那么你的选择就变成了:

Shiny:需要一个服务器来执行用户输入的 R 代码。可以实现任何布局。可以通过处理服务器端(在 R 中)或客户端(在嵌入式 JavaScript 中)来运行交互式代码。 shinydashboard:需要一个服务器来执行用户输入的 R 代码。可以实现仪表板布局。包含一些设计用于仪表板布局的特定小部件。可以通过处理服务器端(在 R 中)或客户端(在嵌入式 JavaScript 中)来运行交互式代码。 flexdashboard:只是一个看起来像仪表板的文档。还包含一些设计用于仪表板布局的特定小部件。只能在客户端运行交互式代码(在嵌入式 JavaScript 中)。

因此,基本上,如果现有包(使用 htmlwidgets)可以提供所需的交互性,那么您可以只使用 flexdashboard 而无需将其部署到任何 Shiny 服务器。否则,您确实需要部署到 Shiny 服务器,并且应该使用 Shiny 或 Shinydashboard。

【讨论】:

如果你在 flexdasboard 中使用闪亮的运行时,你需要一个闪亮的服务器来托管它。【参考方案2】:

我不同意您需要拥有 Shiny Server 才能运行闪亮的应用程序。我只是在我们的服务器上的 5050 端口(防火墙后面)上托管我闪亮的应用程序,任何客户端都可以通过 ip:port 访问该应用程序。我只运行 1 个 RStudio 会话来完成此操作。

如果我通过我们的路由器打开端口转发,这个应用程序也可以通过互联网访问 - 但出于安全原因,我不允许这样做。

我喜欢 Shiny 提供的自定义网页的灵活性。

ShinyDashboard 很棒,因为它提供了商业外观,而无需自己编写所有的 css 和 html。

Flexdashboard 也很好,因为您可以将它托管在可以处理降价的服务上,而不是通过 iFrame 或其他方式插入应用程序。

【讨论】:

【参考方案3】:

我喜欢将闪亮的模块放在 flexdashboard 中。只要您将runtime: shiny 放在您的YAML 标题部分,使用闪亮的模块应该相对简单。相对而言,我的意思是,花一天时间阅读 RStudio 中的所有示例,然后尝试对您的代码执行相同的操作。一旦您完成了学习曲线,flexdashboards 中的模块将使未来的开发更加精简、轻松,并且根据我的经验,让我有机会真正专注于我被要求解决的基于数据的基础问题。我认为flexdashboards + shiny modules 是两全其美的:使用 flexdash 分解一些布局项,轻松添加或删除一段代码,以更直观的布局隔离应用程序代码的各个方面('块的阴影' 在 RMD 文件等中),同时仍然允许您进行更复杂的、典型的 shiny 事情,例如设置观察者、代理或自定义布局。

【讨论】:

【参考方案4】:
    shinydashboard 具有比默认闪亮更好的 UI 元素,但它就像一个现代主题。我认为它不应该被列为其他 2 的竞争对手。 flexdashboard 只是增强的 RMarkdown,使用简单的 UI 排列约定、htmlwidgets 等。您可以在其中使用 Shiny,但它是有限的。 要使用 Shiny,您需要为 UI 和行为编写更多代码,学习更多与 html、css 相关的内容,尤其是需要一些时间掌握的响应式内容。最后,您将获得所有的权力和控制权。

【讨论】:

以上是关于R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何知道(或指定)R shiny 使用的 localhost 端口(在本地运行时)

r Shiny #r #shiny中突出显示的文本输入

构建Shiny应用

shiny 生成的页面可以脱离R使用吗?

RStudio 服务器 Shiny 上的 R Shiny dev 应用程序启动时崩溃

通过 Shiny Server 将 Shiny 输入传递给 R markdown