English · PDF 502
htmlwidgets 提供客户端交互——所有交互都发生在浏览器中,独立于 R。一方面,这很棒,因为你可以在不连接 R 的情况下分发 HTML 文件。然而,这从根本上将你能做的事情限制在了已经用 HTML 和 JavaScript 实现的功能上。另一种方法是使用 Shiny,这个包允许你用 R 代码(而不是 JavaScript)创建交互。
要在 R Markdown 文档中调用 Shiny 代码,请在头部添加 runtime: shiny :
title: "Shiny Web App"
output: html_document
runtime: shiny
然后你可以使用 "input" 函数向文档添加交互组件:
library(shiny)textInput("name", "What is your name?")
numericInput("age", "How old are you?", NA, min = 0, max = 150)
之后你可以通过 input$name and input$age 来引用这些值,并且每当它们发生变化时,使用它们的代码都会自动重新运行。
What is your name?
How old are you?
我无法在这里向你展示一个实时的 Shiny 应用,因为 Shiny 的交互发生在服务器端。这意味着你无需了解 JavaScript 就能编写交互式应用,但也意味着你需要一台服务器来运行它。这带来了一个实际部署的问题:Shiny 应用需要一个 Shiny 服务器才能在线运行。当你在自己的电脑上运行 Shiny 应用时,Shiny 会自动为你搭建一个 Shiny 服务器,但如果你想在网上发布这类交互功能,就需要一个面向公众的 Shiny 服务器。这就是 Shiny 的根本权衡:在 Shiny 文档中你可以做任何 R 能做的事情,但它需要有人运行 R。
了解更多关于 Shiny 的信息,请访问 http://shiny.rstudio.com/.