R极简教程-13:交互式网站Shiny框架

本文介绍了R语言的Shiny框架,用于构建交互式Web应用。通过Shiny,用户可以用少量代码创建实时更新的应用,无需JavaScript知识。文章展示了从简单页面创建到数据可视化的案例,包括与地图的结合,同时也提到了Shiny的反应式编程模型和易于扩展的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我最喜欢的R组件之一,彻底地改变了R语言的可视化格局。Shiny是RStudio公司开发的新包,有了它,可以用R语言轻松开发交互式web应用。

本篇所有案例出自Shiny官网。

特性有以下几点

  • 只用几行代码就可以构建有用的web应用程序—不需要用JavaScript。
  • Shiny应用程序会自动刷新计算结果,这与电子表格实时计算的效果类似。 当用户修改输入时,输出值自动更新,而不需要在浏览器中手动刷新。
  • Shiny用户界面可以用纯R语言构建,如果想更灵活,可以直接用HTML、CSS和JavaScript来写。
  • 可以在任何R环境中运行(R命令行、Windows或Mac中的Rgui、ESS、StatET、RStudio等)
  • 基于Twitter Bootstrap的默认UI主题很吸引人。
  • 高度定制化的滑动条小工具(slider widget),内置了对动画的支持。
  • 预先构建有输出小工具,用来展示图形、表格以及打印输出R对象。
  • 采用websockets包,做到浏览器和R之间快速双向通信。
  • 采用反应式(reactive)编程模型,摒弃了繁杂的 事件处理代码,这样你可以集中精力于真正关心的代码上。
  • 开发和发布你自己的Shiny小工具,其他开发者也可以非常容易地将它加到自己的应用中(即将面市!)

安装
Shiny可以从CRAN获取, 所以你可以用通常的方式来安装,在R的命令行里输入:

install.packages("shiny")

一个超级简单的页面

我们再目录下建一个文件夹叫做Shiny_1,在其中写入两个文件,server.R和ui.R,然后往其中添加一些代码,很少的一些代码:

# Rely on the 'WorldPhones' dataset in the datasets
# package (which generally comes preloaded).
library(datasets)

# Use a fluid Bootstrap layout
fluidPage(    

  # Give the page a title
  titlePanel("Telephones by region"),

  # Generate a row with a sidebar
  sidebarLayout(      

    # Define the sidebar with one input
    sidebarPanel(
      selectInput("region", "Region:", 
                  choices=colnames(WorldPhones)),
      hr(),
      helpText("Data from AT&T (1961) The World's Telephones.")
    ),

    # Create a spot for the barplot
    mainPanel(
      plotOutput("phonePlot")  
    )

  )
)

我们来分析一下上述代码,其中只分了两个部分:mainPanel和sidebarPanel,我们用函数来表示这些工具,然后我们可以看到,再mainPanel里边,我们有一个函数叫做plotOutput()函数,这个里边只有一个字符串,叫做”phenoPlot”,这个字符串很重要很重要,因为我们的后端程序,就是通过这个小小的参数进行传递到前段的。

另外,再UI里还有一个重要的东西就是select工具,那里有一个参数叫做region,这个region是从UI传到server的参数。所以Shiny的模式基本上就是,从前段接受参数,传到到后端,后端处理完的图片,直接传递到前段。写代码的时候,要有前后端的概念。

然后我们看一下server的代码:

# Rely on the 'WorldPhones' dataset in the datasets
# package (which generally comes preloaded).
library(datasets)

# Define a server for the Shiny app
function(input, output) {

  # Fill in the spot we created for a plot
  output$phonePlot <- renderPlot({

    # Render a barplot
    barplot(WorldPhones[,input$region]*1000, 
            main=input$region,
            ylab="Number of Telephones",
            xlab="Year")
  })
}

我们可以看到,有一行代码写的是:output$phenoPlot,这个很重要,因为phenoPlot就是之前的plot的名字。

全部写完以后,我们打开R,载入shiny包,然后输入:

runApp("./Shiny_1")

就可以看到网页:
这里写图片描述

下面我们来看一下数据的情况:

> WorldPhones
     N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
1951  45939  21574 2876   1815    1646     89      555
1956  60423  29990 4708   2568    2366   1411      733
1957  64721  32510 5230   2695    2526   1546      773
1958  68484  35218 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值