当前位置: 首页 > news >正文

R语言中的shiny框架

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)

效果
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《AI设计类工具系列之一——FigJam AI》
  • 邀请功能的实现分析
  • 初识C语言(三)
  • 嵌入式开发中学习C++的用处?
  • 拼图缺口形状检测系统源码分享
  • 解锁电商新视界:京东商品详情API——您的深度商品信息探索利器
  • Javax Validation 自定义注解校验(身份证号校验)
  • 线程池的执行流程和配置参数总结
  • np.array_fancy_indexing花式索引
  • Vue.js入门
  • 如何使用ssm实现基于BS的库存管理软件设计与实现+vue
  • AI中医香方仪丨OPENAIGC开发者大赛企业组AI创作力奖
  • 大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
  • tcp、udp通信调试工具Socket Tool
  • Android Perfetto 学习
  • 【css3】浏览器内核及其兼容性
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • linux学习笔记
  • mysql中InnoDB引擎中页的概念
  • opencv python Meanshift 和 Camshift
  • python_bomb----数据类型总结
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue 2.3、2.4 知识点小结
  • 从tcpdump抓包看TCP/IP协议
  • 配置 PM2 实现代码自动发布
  • 学习JavaScript数据结构与算法 — 树
  • Spring Batch JSON 支持
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​字​节​一​面​
  • # Kafka_深入探秘者(2):kafka 生产者
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (function(){})()的分步解析
  • (补充)IDEA项目结构
  • (不用互三)AI绘画工具应该如何选择
  • (第二周)效能测试
  • (二)linux使用docker容器运行mysql
  • (离散数学)逻辑连接词
  • (六)Hibernate的二级缓存
  • (十)T检验-第一部分
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)http-server应用
  • (转)Linux下编译安装log4cxx
  • (转)创业家杂志:UCWEB天使第一步
  • (转)平衡树
  • .htaccess 强制https 单独排除某个目录
  • .java 9 找不到符号_java找不到符号
  • .NET Micro Framework初体验
  • .NET/C# 使窗口永不获得焦点
  • .net分布式压力测试工具(Beetle.DT)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Transactional事务注解内含乾坤?
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [7] CUDA之常量内存与纹理内存