R语言中的shiny框架

news/2024/9/28 14:00:34/

R语言中的shiny框架

  • Shiny 的基本概念
  • 基本用法示例
  • 常见用法示例
    • 1. 输入控件
    • 2. 输出控件
    • 3. 动态 UI
    • 4. 数据传递和反应式编程
  • 高级功能
    • 1. 使用 shinyjs
    • 2. 使用 shinythemes

Shiny 是一个 R 语言的框架,用于构建交互式的网页应用,可以让用户以最少的 HTML、CSS 和 JavaScript 代码开发动态的Web 应用程序,Shiny 主要优点是能够将 R 的分析和可视化能力直接嵌入到 Web应用中,从而使数据分析变得更直观和易于交互,通过结合 UI设计和服务器逻辑,可创建各种功能丰富的应用,包括数据可视化、动态输入和响应式编程等

Shiny 的基本概念

Shiny 应用程序主要由两个部分组成:
1. UI(用户界面): 定义应用的布局和外观
2. Server(服务器逻辑): 定义应用的逻辑和数据处理

基本用法示例

library(shiny)# Define UI
ui <- fluidPage(titlePanel("Hello Shiny!"),sidebarLayout(sidebarPanel(sliderInput("num", "选择一个数字", 1, 100, 50)),mainPanel(textOutput("value")))
)# Define server logic
server <- function(input, output) {output$value <- renderText({paste("你选择的数字是", input$num)})
}# Run the application
shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

常见用法示例

1. 输入控件

Shiny 提供了多种输入控件,包括:

  • textInput()
  • numericInput()
  • sliderInput()
  • selectInput()
  • checkboxInput()
  • radioButtons()

示例:滑块和文本输入

library(shiny)ui <- fluidPage(sidebarLayout(sidebarPanel(sliderInput("slider", "选择一个值:", min = 1, max = 100, value = 50),textInput("text", "输入文本:", "默认文本")),mainPanel(textOutput("sliderValue"),textOutput("textValue")))
)server <- function(input, output) {output$sliderValue <- renderText({paste("滑块的值是:", input$slider)})output$textValue <- renderText({paste("输入的文本是:", input$text)})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

2. 输出控件

Shiny 提供了多种输出控件,用于展示数据和图表,包括:

  • textOutput()
  • verbatimTextOutput()
  • plotOutput()
  • tableOutput()
  • imageOutput()

示例:绘制图表

library(shiny)ui <- fluidPage(sidebarLayout(sidebarPanel(sliderInput("num", "选择一个数字:", min = 1, max = 100, value = 50)),mainPanel(plotOutput("histPlot")))
)server <- function(input, output) {output$histPlot <- renderPlot({hist(rnorm(input$num), main = "随机数的直方图", xlab = "值", ylab = "频率")})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

3. 动态 UI

有时需要根据输入动态生成 UI 组件,这可以使用 uiOutput() 和 renderUI() 来实现

示例:动态生成文本输入框

library(shiny)ui <- fluidPage(sidebarLayout(sidebarPanel(numericInput("numInputs", "选择文本框数量:", 1, min = 1, max = 10),uiOutput("dynamicInputs")),mainPanel(verbatimTextOutput("values")))
)server <- function(input, output, session) {output$dynamicInputs <- renderUI({n <- input$numInputslapply(1:n, function(i) {textInput(paste0("text", i), paste("文本框", i))})})output$values <- renderPrint({inputs <- sapply(1:input$numInputs, function(i) {input[[paste0("text", i)]]})inputs})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

4. 数据传递和反应式编程

Shiny 使用反应式编程模型来处理数据的动态变化。使用 reactive() 和 reactiveVal() 可以创建反应式值和表达式

示例:反应式表达式

library(shiny)ui <- fluidPage(sidebarLayout(sidebarPanel(sliderInput("num", "选择一个数字:", min = 1, max = 100, value = 50)),mainPanel(textOutput("sumValue")))
)server <- function(input, output) {reactiveSum <- reactive({input$num + 10})output$sumValue <- renderText({paste("数字加10的结果是:", reactiveSum())})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

高级功能

1. 使用 shinyjs

shinyjs 可用来增强 Shiny 应用的功能,比如隐藏和显示 UI 元素、执行 JavaScript 代码等

library(shiny)
library(shinyjs)ui <- fluidPage(useShinyjs(),  # 使 shinyjs 可用actionButton("toggle", "切换文本框"),textInput("txt", "文本框", "初始值")
)server <- function(input, output) {observeEvent(input$toggle, {toggle("txt")  # 切换文本框的显示和隐藏})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述

2. 使用 shinythemes

shinythemes 提供了多种预设的主题,可以用来美化 Shiny 应用的界面

library(shiny)
library(shinythemes)ui <- fluidPage(theme = shinytheme("darkly"),  # 使用 darkly 主题titlePanel("Shiny 应用的主题"),sidebarLayout(sidebarPanel(sliderInput("num", "选择一个数字:", min = 1, max = 100, value = 50)),mainPanel(textOutput("value")))
)server <- function(input, output) {output$value <- renderText({paste("你选择的数字是", input$num)})
}shinyApp(ui = ui, server = server)

效果
在这里插入图片描述


http://www.ppmy.cn/news/1530961.html

相关文章

FastGPT大模型介绍

目录 一、FastGPT大模型介绍 1. 开发团队 2. 发展史 3. 基本概念 4. 架构 5. 使用案例 6. 安装步骤 二、FastGPT与其他大模型的对比 三、总结 一、FastGPT大模型介绍 1. 开发团队 FastGPT由FastAI团队开发&#xff0c;团队成员包括多位在机器学习和自然语言处理领域…

C++ 刷题 使用到的一些有用的容器和函数

优先队列 c优先队列priority_queue&#xff08;自定义比较函数&#xff09;_c优先队列自定义比较-CSDN博客 373. 查找和最小的 K 对数字 - 力扣&#xff08;LeetCode&#xff09; 官方题解&#xff1a; class Solution { public:vector<vector<int>> kSmallestP…

自动化测试常用函数:弹窗、等待、导航、上传与参数设置

目录 一、弹窗 1. 警告弹窗确认弹窗 2. 提示弹窗 二、等待 1. 强制等待 2. 隐式等待 3. 显示等待 三、浏览器导航 1. 打开网站 2. 浏览器的前进、后退、刷新 四、文件上传 五、浏览器参数设置 1. 设置无头模式 2. 页面加载策略 一、弹窗 弹窗是在页面是找不到任何…

2024最新!!!iOS高级面试题,全!(二)

iOS应用是如何启动以及如何优化 pre-main阶段 加载动态链接器dyld到App进程 加载动态库&#xff08;包括所依赖的所有动态库&#xff09; Rebase 修正内部的指针指向 Bind 修正外部指针指向 初始化Objective C Runtime 包括oc的类、分类的注册&#xff0c;selector唯一性检查等…

图像分割【1】mask标签

文章目录 图像标签多类分割的标签图像:标签图像的格式 灰度图像:1. 像素值表示2. 图像矩阵3. 数据类型4. 灰度图像的数据结构5. 灰度图的应用总结 图像标签 在图像分割&#xff0c;特别是语义分割任务中&#xff0c;标签图像&#xff08;即“mask”或“ground truth”图像&…

跟李沐学AI:自注意力和位置编码

自注意力 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;&#xff0c;也被称为内部注意力&#xff08;Intra-attention&#xff09;或并行注意力&#xff08;Parallel Attention&#xff09;&#xff0c;是一种在深度学习模型中用于处理序列数据的机制。它允许…

全栈项目小组【算法赛】题目及解题

题目&#xff1a;全栈项目小组【算法赛】 题目&#xff1a; 解题思路 1.遍历简历信息&#xff1a;我们需要读取所有简历&#xff0c;根据期望薪资和岗位类型进行分类和统计。 2.分类统计&#xff1a;使用哈希表来存储每个薪资下的前端&#xff08;F&#xff09;和后端&#…

Electron 安装包 asar 解压定位问题实战

背景 在开发 Electron 过程中&#xff0c;我们想知道 Electron 打包的最终形态是什么样的&#xff0c;以便我们能更好的理解 Electron 打包的过程&#xff0c;以及逆向来快速追踪一些问题&#xff0c;例如下面这个报错&#xff0c;以前这类报错都是靠猜&#xff0c;现在则可以…