作为Shiny平台构建与R包开发教程的第三小节,本节向读者展示如何利用Shiny server输出自己想要的数据,包括Rplot、Table、Text等信息。

数据输出机制

仍以上一节的案例为基础:

library(data.table)ui.data <- fluidPage(fileInput("data_input1", "Experiment:", accept = ".csv"),tableOutput('data_tbout1')
)server <- function(input, output){read.d1 <- reactive({inFile1 <- input$data_input1if (is.null(inFile1)) return(NULL)fread(inFile1$datapath)})output$data_tbout1 <- renderTable({dat1 <- read.d1()head(dat1)})
}shinyApp(ui.data, server)

上一节解释了数据输入Shiny server的机理,阐明了fileInputinput$input_id组合在数据输入中的作用。数据输出的机理类似,其核心是FuncoutputrenderFunc函数组合,其中Func可以是Table、Plot、Text甚至是Plotly等等。renderFunc中的第一个参数定义了数据输出区域的id,这一id就被追加在server的output变量中。采用output$output_id即可完成server与ui的对接。

随后,output$output_id被赋上renderFunc函数的返回值。renderFunc中的表达式是个“reactive表达式”,即任意事件的发生都会导致该表达式的值被重新计算,以确保它的值与服务器的最新状态匹配。表达式的末尾语句相当于该表达式的返回值。该值也成为了输出的最终内容。在上述案例中,server最终显示的内容是head(dat1),用于打印上传数据的头部,以提醒用户的确成功地把数据传送到了服务器上。

对于其他类型的输出,只需依葫芦画瓢。

Plotly

plotly包支持shiny接口,能实现shiny网页的动态可视化,从而显著提升用户体验感。同时,plotlyggplotly函数又能很好地与强大的绘图包ggplot2包构建良好的联系,因而实际上成为了renderPlot方法的优良替代品。

Expmeasure包(见教程首页)的Trend 2D模块就是一个很好的例子:

#This case will NOT run
ui.trend.2D_Plot <- fluidPage(sidebarLayout(sidebarPanel(fluidRow(column(12, align = "center",actionBttn(inputId = "trend_2DPlot_APPLY",label = "APPLY!",style = "pill", color = "danger") )),uiOutput("trend_2DPlot_pick1d_explantory"),width = 3),#**************Notice***************mainPanel(plotlyOutput('trend_2DPlot_plot1', height = "600px"), width = 9)#**************Notice***************)
)server <- function(input, output){#...Codes omittedtrend.2Dplot <- function(dat, x, y){txt1 <- paste("dat$",x,sep='')txt2 <- paste("dat$",y,sep='')g <- ggplot(dat, aes(eval(parse(text = txt1)), eval(parse(text = txt2)))) + geom_smooth() + geom_point() + xlab(x) + ylab(y)#**************Notice***************return(plotly::ggplotly(g))#**************Notice***************}output$trend_2DPlot_pick1d_explantory <- renderUI({pickerInput(inputId = "trend_2DPlot_pick1_explantory",label = "Select explantory variable", choices = input$data_pick2_explantory)})trend_2DPlot_APPLY_click <- 0trend_2DPlot_plot1area <- NULL#**************Notice***************output$trend_2DPlot_plot1 <- renderPlotly({if(input$trend_2DPlot_APPLY > trend_2DPlot_APPLY_click){trend_2DPlot_APPLY_click  <<- trend_2DPlot_APPLY_click + 1trend_2DPlot_plot1area <<- trend.2Dplot(read.d1(), input$trend_2DPlot_pick1_explantory, input$data_pick1_response)}trend_2DPlot_plot1area})#**************Notice***************#...Codes omitted
}

其效果如图所示:

可以看到,plotly中动态交互绘图的工具栏已经显示在Shiny界面上。尽管上述代码复杂,我们只需关注三个地方(被Notice标签包裹):

  1. plotlyOutput函数:第一个函数定义数据输出区域的id。第二个参数定义输出图片的高度(可有可无,但往往你会发现它还是挺有用的)。
  2. trend.2Dplot自定义函数末尾的ggplotly函数,将一个ggplot转化为plotly的格式。
  3. output变量后跟上数据输出区域的id,从而与ui对接。renderPlotly函数的最后一行返回一个plotly绘图对象,最终使目标区域绘出图像。renderPlotly函数内部代码有些复杂,在本节无需关注,这在下节内容中会详细说明。

动态ui

您可能希望一些Shiny控件会随着用户上传的数据而动态变化。这在上述代码中也已经实现。动态输出ui事实上也是数据输出的一个特殊案例,其核心是uiOutputrenderUI函数组合,其机理与其他数据输出没有太大差异,只不过renderUI函数输出是一个UI而已。

上一篇: Shiny平台构建与R包开发(二)——数据输入
下一篇: Shiny平台构建与R包开发(四)——按钮与响应事件


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

Shiny平台构建与R包开发(三)——数据输出相关推荐

  1. Shiny平台构建与R包开发(四)——按钮与响应事件

    作为Shiny平台构建与R包开发教程的第四小节,本节向读者进一步强调Shiny server的工作机理,并由此设计按钮点击事件. Shiny server工作机理与问题 前面的几个小节已经向读者初步解 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. r语言 将表格导出为csv_如何将R语言中表格数据输出为Excel文件.pdf

    如何将R 语言中的表格数据输出为Excel 文件 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan@126.com /u/Bearjazz 平台的开放性使得R 语言具有了丰富的运算 ...

最新文章

  1. xp系统web服务器搭建教程,Windows_XP配置WEB服务器教程(图)
  2. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)
  3. 开始使用C++11的9个理由
  4. pyautogui typewrite_解放双手:Pyautogui帮你work
  5. 编辑index.html
  6. java代码实现画板_求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能!...
  7. CF-1156F Card Bag
  8. python prettytable格式设置_Python prettytable模
  9. ArrayList的初始化常用方式,扩容,和应用(去重)
  10. 基于FTP服务器搭建yum源
  11. 递增的整数序列链表的插入_leetcode673_go_最长递增子序列的个数
  12. VMware安装linux镜像
  13. 致远SPM之CAP数据分析解决方案
  14. 面试官;经典面试题-JVM篇
  15. 基于Salt Event系统构建Master端returner
  16. Android UI基础 仿闲鱼发布页
  17. Metrics 简介
  18. Python两台电脑实现TCP通信
  19. 0.618方法matlab流程图,0.618法的matlab实现
  20. 黑马程序员_MongoDB笔记

热门文章

  1. 如何保证MySQL和Redis的数据一致性?
  2. 媳妇居然在家偷偷背着我偷看我的面试笔记,一个月后拿下大厂offer!(文末送书)...
  3. 文件 IO 中如何保证掉电不丢失数据?
  4. 阿里巴巴Druid,轻松实现MySQL数据库加密!
  5. 从一道面试题谈谈一线大厂码农应该具备的基本能力
  6. 阿里老员工论坛炫耀:每年税前260万,还有三千万期权在握
  7. 情侣必做的100件小事,提升幸福感,快收藏
  8. CPU工作过程——MCU
  9. 编写MapReduce程序,统计每个买家收藏商品数量,实现统计排序功能
  10. 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...