R语言中的shiny框架

news2024/9/20 5:04:05

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$numInputs
    lapply(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.coloradmin.cn/o/2147935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞驰云联FTP替代方案:安全高效文件传输的新选择

FTP协议广泛应用各行业的文件传输场景中&#xff0c;由于FTP应用获取门槛低、使用普遍&#xff0c;因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变&#xff0c;FTP在传输安全性与传输性能上有所欠缺&#xff0c;无法满足企业现在的高…

2024java面试-软实力篇

为什么说简历很重要&#xff1f; 一份好的简历可以在整个申请面试以及面试过程中起到非常好的作用。 在不夸大自己能力的情 况 下&#xff0c;写出一份好的简历也是一项很棒的能力。为什么说简历很重要呢&#xff1f; 、 先从面试来说 假如你是网申&#xff0c;你的简历必然…

Windows本地pycharm使用远程服务器conda虚拟环境

1、Windows下载pycharm专业版&#xff0c;必须是专业版&#xff0c;不然连不了远程服务器。 Download PyCharm: The Python IDE for data science and web development by JetBrains 2、添加远程服务器的虚拟环境&#xff0c;在pycharm右下角落选择 添加新的解释器>>SSH。…

计算机网络33——文件系统

1、chmod 2、chown 需要有root权限 3、link 链接 4、unlink 创建临时文件&#xff0c;用于非正常退出 5、vi vi可以打开文件夹 ../是向外一个文件夹 6、ls ls 可以加很多路径&#xff0c;路径可以是文件夹&#xff0c;也可以是文件 ---------------------------------…

【Java】并发集合

并发集合&#xff08;java.util.concurrent&#xff09; 一、List CopyOnWriteArrayList&#xff08;ReentrantLock实现线程安全&#xff09; &#xff08;1&#xff09;并发修改&#xff08;写操作&#xff09;时保证线程安全&#xff1a; 通过ReentrantLock实现多个线程并…

Solidwork角度尺寸标注

效果如下&#xff1a; 首先&#xff0c; 先选第一条边 然后选第二条边&#xff0c;即可

把设计模式用起来!(4) 用不好模式?之原理不明

&#xff08;清华大学出版社 《把设计模式用起来》书稿试读&#xff09; 上一篇&#xff1a;把设计模式用起来&#xff01;&#xff08;3&#xff09;用不好模式&#xff1f;之时机不对 为什么用不好设计模式&#xff1f;——原理不明 难搞的顾客&#xff1a;“抹这种霜&#…

【prefect】python任务调度工具 Prefect | 可视化任务工具 | Python自动化的终极武器 | 高效数据管道管理

一、产品介绍 1、官方 Github https://github.com/PrefectHQ/prefect 2、官方文档 https://docs.prefect.io/3.0/get-started/index 3、Pgsql说明 正确的python链接pgsql如下&#xff1a; import psycopg2 from sqlalchemy import create_enginedef connect_with_psycopg2(…

【机器学习】经典数据集鸢尾花的分类识别

【机器学习】经典数据集鸢尾花的分类识别 1、数据集介绍1.1 数据集详情 2、实验内容2.1 准备数据集2.2 创建颜色映射对象2.3 绘制特征散点图2.4 数据的归一化2.5 数据的标准化 3、实验截图提取萼片长度与萼片宽度分类提取萼片长度与花瓣长度分类提取萼片长度与花瓣宽度分类提取…

Photoshop 2021安装教程

软件介绍 Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是美国Adobe公司旗下最为出名的图像处理软件系列之一。ps 2021新增一键换天空&#xff0c;AI只能滤镜&#xff0c;新增内置的画笔工具极为丰富&#xff0c;成千上万的精致像素、动态和矢量画笔可以满足你的各种绘图…

谷歌深度学习研究揭示OpenAI O1模型优化策略:比规模更重要的计算效率

引言 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如OpenAI的GPT-4和Google DeepMind的Palm 2已成为自然语言处理领域的佼佼者&#xff0c;它们通过生成类人文本、回答复杂问题、编写代码等能力&#xff0c;改变了许多行业的工作方式。然而&#xff0c;随着这…

2.4 数据库表字段约束

一、数据库三大范式 我们构造数据库的时候必须要遵守一定的原则&#xff0c;那这个规则就是范式关系型数据库&#xff0c;一共有六种范式&#xff0c;一般情况下只需要满足第三范式即可。 ​第一范式&#xff1a;原子性构造数据库必须遵循一定的规则&#xff0c;这种规则就是…

使用集成学习对不同的机器学习方法进行集成

数据入口&#xff1a;数据人才的现场调研 - Heywhale.com 本数据集中有 43 行&#xff0c;19 列&#xff0c;数据集包含如下字段&#xff1a; 首先读取数据&#xff1a; import pandas as pd# 读取Excel文件 data pd.read_excel(数据人才的现场调研.xls)可以输出每一列含有…

供方软件供应链安全保障要求及开源场景对照自评表(下)

国标《信息安全技术 软件供应链安全要求》确立了软件供应链安全目标&#xff0c;规定了软件供应链安全风险管理要求和供需双方的组织管理和供应活动管理安全要求。 开源软件供应链作为软件供应链的一种特殊形式&#xff0c;该国标亦适用于指导开源软件供应链中的供需双方开展组…

C HTML格式解析与生成之gumbo

测试 #include <fstream> #include <iostream> #include <stdlib.h> #include <string>#include "../src/gumbo.h"// 提取纯文本内容 static std::string cleantext(GumboNode* node) {if (node->type GUMBO_NODE_TEXT) {return std::st…

【TabBar嵌套Navigation案例-关于页面 Objective-C语言】

一、关于页面 1.首先,看一下我们的示例程序 点击关于以后,它实际上,跳到的也是SettingController,然后呢,传一个plist,但是,这个Controller里边,又多了一个header,所以,这个里边,我们也是用继承的方式去写,因为其他的页面没有这个header,不是所有的Setting都有he…

数据结构--结构体数组和结构体指针

1.定义结构体数组存储5个学生的信息&#xff1a;姓名&#xff0c;年龄&#xff0c;性别 定义函数实现输入&#xff0c;要求形参使用结构体指针接收 函数实现5个学生年龄排序(注意对年龄排序时&#xff0c;交换的是所有信息) 定义函数实现输出&#xff0c;要求形参使用结构体…

Innovus跑到中途想要更换library怎么办?

有的小伙伴在跑innovus时&#xff0c;可能会碰到library更新等问题。但此时&#xff0c;place已经跑完了&#xff0c;又不想重新跑&#xff0c;怎么办呢&#xff1f; 其实&#xff0c;每次保存的innovus database里面都有专门存放这些数据的文件。我们可以将其中一些setting文件…

VBA技术资料MF197:禁用复制的快捷键

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Linux内核结构

Linux内核结构 文章目录 Linux内核结构一、Linux内核结构介绍1.1 总体结构&#xff1a;1.2 Linux内核结构框图&#xff1a; 二、图解Linux系统架构三、shell3.1 shell的含义&#xff1a;3.2 shell的作用&#xff1a;3.3 shell的类型&#xff1a;3.4 shell的使用&#xff1a;3.5…