作为Shiny平台构建与R包开发教程的第四小节,本节向读者进一步强调Shiny server的工作机理,并由此设计按钮点击事件。

Shiny server工作机理与问题

前面的几个小节已经向读者初步解释了Shiny server的工作机理,其核心是"reactive表达式"。它有两种定义方法:

#1 Reactive expression definited separately
exp1 <- reactive({#A reactive expression
})
#2 Reactive expression definited in RenderFunc
output$output_id <- renderFunc({#A reactive expression
})

只要触发任意事件(包括服务器初始化、用户在Shiny网页中做任何工作),"reactive表达式"的值就会重新计算。

如果Shiny APP存在大量数据分析模块,这就意味着,只要用户在Shiny网页的任意一个模块i中点击了一次radio button,所有数据分析模块的图像都自动重新绘制。这将对服务器造成不少负担,也是用户所不希望看到的。

按钮事件

为了解决这一问题,我们往往希望让用户点击某一按钮后,再输出相应内容。案例代码如下:

library(shiny)
library(shinyWidgets)ui<- fluidPage(sidebarLayout(actionBttn(inputId = "bttn",label = "APPLY!",style = "pill", color = "danger"),textOutput("click_times"))
)server <- function(input, output){bttn_click <- 0bttn_text <- NULLoutput$click_times <- renderText({if(input$bttn > bttn_click){bttn_click  <<-  bttn_click + 1bttn_text <<- paste("Click times =", input$bttn)}bttn_text})
}shinyApp(ui, server)

其中,actionBttn为按钮的ui,textOutput定义了文字输出的区域。input$bttn引用了按钮的id,能够获取按钮的点击次数。Shiny中,每次点击按钮,它的值就会增加1。此时设置另一个变量bttn_click,并在"reactive表达式"中告诉服务器只有按钮点击次数+1时才能执行if语句中的代码。尽管服务器初始化也是一个事件,也会触发"reactive表达式"的计算,但此时bttn_clickinput$bttn均为0,因而并不会输出任何文字。如果在上述代码中加入另一个shiny控件,即使用户在Shiny网页中触发其他shiny控件的事件,也不能让input$bttn的值增加,因而同样不会触发if语句中的代码。

上一篇: Shiny平台构建与R包开发(三)——数据输出
下一篇: Shiny平台构建与R包开发(五)——ui美化


欢迎感兴趣的同行朋友们批评指正。
联系邮箱:hrwu_ecology@163.com

Shiny平台构建与R包开发(四)——按钮与响应事件相关推荐

  1. Shiny平台构建与R包开发(五)——ui美化

    本节简单地向读者介绍Shiny APP中ui的美化方法. shinythemes 利用shinythemes包,您可以选择不同的bootstrap风格,并将其应用到Shiny APP中. 安装完shi ...

  2. Shiny平台构建与R包开发(三)——数据输出

    作为Shiny平台构建与R包开发教程的第三小节,本节向读者展示如何利用Shiny server输出自己想要的数据,包括Rplot.Table.Text等信息. 数据输出机制 仍以上一节的案例为基础: ...

  3. Shiny平台构建与R包开发(一)——ui布局

    本节为Shiny平台构建与R包开发教程的第一小节. Getting Started 初识Shiny时,了解其工作机理非常重要.下面的案例展示了一个最简单的Shiny APP的工作机理: #DO NOT ...

  4. Shiny平台构建与R包开发

    Introduction 在数据库网页搭建教程中已经提到,数据分析决策平台的搭建十分重要.数据库网页是数据分析决策平台的重要表现形式之一,能够很好地将大量数据或其分析结果公开展示,并能提供数据下载.统 ...

  5. Shiny平台构建与R包开发(七)——Shiny APP部署

    本节展示了如何分享和部署Shiny APP.您可以将开发好的Shiny APP部署在自己的服务器上,或是将其部署在公共的平台(即shinyapps.io)上.这里仅分享后者.对于如何将Shiny AP ...

  6. Shiny平台构建与R包开发(二)——数据输入

    作为Shiny平台构建与R包开发教程的第二小节,本节向读者介绍如何利用Shiny server处理用户输入的各种信息.这些信息既包括用户向Shiny上传的数据集,也包括用户对Shiny页面的各种控件( ...

  7. R包开发每日中国天气

    R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...

  8. R · R 包开发 | 保姆级教程

    R · R 包开发 一般在初始阶段我们都是使用别人的函数来完成大部分任务,那些函数大多来自 R 标准安装的包或者可以从 CRAN 下载的包. 安装新的包可以拓展 R 的功能.比如说,安装 ggplot ...

  9. 直播平台搭建直播软件怎么开发四大功能源码解析

    在我们看来时代的变迁,是人们对新事物的适应能力.从我们手机app中可以看到,从我们最开始的文字.图片交流的QQ,历经几年慢慢的演变成图文动画,视频聊天互动应有尽有.社交app由此诞生,以前的互动程序已 ...

最新文章

  1. QTP连接oracle
  2. 如何在 Linux 上用密码加密和解密文件
  3. docker导入镜像报错:invalid diffID for layer xxx: expected “sha256:xxx“, got “sha256:xxx“(文件被更改过)
  4. c#自定义Json类
  5. Archive for required library: ‘WebContent/WEB-INF/lib/xxx.jar cannotn
  6. “约见”面试官系列之常见面试题之第六十一篇之IE和DOM事件流(建议收藏)
  7. 低代码平台,JeecgBoot v3.0版本发布—新里程牌开始,迎接VUE3版本到来
  8. python汉语读音_【学习】python 汉语转拼音
  9. springboot整合nacos配置实现实时更新
  10. Eureka安全访问
  11. Spring 集成 AspectJ的原理
  12. SQL数据库笔试选择题(知识点总结)
  13. steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
  14. 如何提高国际短信到达率?
  15. seo知识技巧-关键词密度选取技巧
  16. win10无法访问ubuntu共享文件夹(smbd出错排查)
  17. Excel自动生成条码工具
  18. 很傻很天真的问题: 什么是语法糖!
  19. 量子纠缠新发现:令人毛骨悚然的神奇现象
  20. Explaining away

热门文章

  1. 今年我读了四个开源项目的源码,来分享下心得
  2. 985硕士毕业进京东,抱怨身边全是二本和大专生!没什么本事却整天高高在上!打交道太累了!...
  3. 程序员学霸!top2大学毕业!不到30岁第一次升P9失败!挫折感极强,怀疑人生?网友:没升P7的我,不要面子的吗??...
  4. Intellij IDEA必备插件,提高效率的“七种武器”!
  5. 滴滴员工抱怨女朋友要求自己上进!工资必须比她高一半!决定分手却不直说!对女朋友冷暴力等她自己走!...
  6. 稳定性专题 | Spring Boot 常见错误及解决方法
  7. 45本互联网圣经级别书籍!包邮送到家!一书在手,天下我有!
  8. 靠纯技术是否能渡过中年危机
  9. 强势分享5款超级实用的办公软件,建议收藏!
  10. c语言 free参数 指针,C语言之free函数以及野指针介绍