R语言Shiny包新手教程
1. 简介
Shiny
是一个 R 包,用于创建交互式网页应用。它非常适合展示数据分析结果和可视化效果。
2. 环境准备
安装R和RStudio
- 确保你的计算机上安装了 R 和 RStudio。
- 你可以从 CRAN 下载 R,或从 RStudio 官网 下载 RStudio。
安装 Shiny 包
打开 RStudio,运行以下命令来安装 shiny
包:
r
install.packages("shiny")
3. 创建你的第一个 Shiny 应用
3.1 应用结构
一个基本的 Shiny 应用通常包括两个部分:
- UI(用户界面):定义应用的外观和布局。
- Server(服务器逻辑):处理用户输入和生成输出。
3.2 示例代码
以下是一个简单的 Shiny 应用,用户可以输入一个数字,并返回其平方值。
r
# 加载 shiny 包
library(shiny)
# 定义用户界面
ui <- fluidPage(
titlePanel("平方计算器"),
sidebarLayout(
sidebarPanel(
numericInput("num", "输入一个数字:", 1),
actionButton("calc", "计算平方")
),
mainPanel(
textOutput("result")
)
)
)
# 定义服务器逻辑
server <- function(input, output) {
observeEvent(input$calc, {
output$result <- renderText({
paste("结果是:", input$num^2)
})
})
}
# 运行应用
shinyApp(ui = ui, server = server)
3.3 代码解释
library(shiny)
:加载 Shiny 包。fluidPage()
:创建一个流式页面布局。titlePanel()
:设置应用的标题。sidebarLayout()
:创建侧边栏布局,包含输入控件和输出。numericInput()
:创建一个数字输入框。actionButton()
:创建一个按钮,用于触发计算。textOutput()
:用于显示计算结果。observeEvent()
:监视按钮点击事件,执行计算并更新输出。
4. 运行 Shiny 应用
将上面的代码保存为 app.R
文件。在 RStudio 中,运行以下命令启动应用:
r
runApp("path/to/your/app.R")
将 path/to/your/app.R
替换为实际文件路径。应用将会在默认浏览器中打开。
5. 扩展应用
5.1 增加可视化
你可以使用 ggplot2
包来增加数据可视化功能:
r
library(shiny)
library(ggplot2)
ui <- fluidPage(
titlePanel("简单的散点图"),
sidebarLayout(
sidebarPanel(
numericInput("num", "输入点的数量:", 10),
actionButton("plot", "生成散点图")
),
mainPanel(
plotOutput("scatterPlot")
)
)
)
server <- function(input, output) {
observeEvent(input$plot, {
output$scatterPlot <- renderPlot({
df <- data.frame(x = rnorm(input$num), y = rnorm(input$num))
ggplot(df, aes(x = x, y = y)) + geom_point()
})
})
}
shinyApp(ui = ui, server = server)
5.2 增加输入控件
你可以添加更多输入控件,如下拉菜单、复选框等:
r
selectInput("var", "选择变量:", choices = names(mtcars))
6. 部署 Shiny 应用
你可以将应用部署到 shinyapps.io 或使用 Shiny Server。下面是使用 rsconnect
包部署到 shinyapps.io 的步骤:
安装 rsconnect
包
r
install.packages("rsconnect")
登录 shinyapps.io
r
library(rsconnect)
rsconnect::setAccountInfo(name='your_account_name', token='your_token', secret='your_secret')
部署应用
r
rsconnect::deployApp('path/to/your/app.R')