Shiny平台构建与R包开发(三)——数据输出
作为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的机理,阐明了fileInput
–input$input_id
组合在数据输入中的作用。数据输出的机理类似,其核心是Funcoutput
–renderFunc
函数组合,其中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网页的动态可视化,从而显著提升用户体验感。同时,plotly
的ggplotly
函数又能很好地与强大的绘图包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标签包裹):
plotlyOutput
函数:第一个函数定义数据输出区域的id。第二个参数定义输出图片的高度(可有可无,但往往你会发现它还是挺有用的)。trend.2Dplot
自定义函数末尾的ggplotly
函数,将一个ggplot
转化为plotly
的格式。output
变量后跟上数据输出区域的id,从而与ui对接。renderPlotly
函数的最后一行返回一个plotly
绘图对象,最终使目标区域绘出图像。renderPlotly
函数内部代码有些复杂,在本节无需关注,这在下节内容中会详细说明。
动态ui
您可能希望一些Shiny控件会随着用户上传的数据而动态变化。这在上述代码中也已经实现。动态输出ui事实上也是数据输出的一个特殊案例,其核心是uiOutput
–renderUI
函数组合,其机理与其他数据输出没有太大差异,只不过renderUI
函数输出是一个UI而已。
上一篇: Shiny平台构建与R包开发(二)——数据输入
下一篇: Shiny平台构建与R包开发(四)——按钮与响应事件
欢迎感兴趣的同行朋友们批评指正。
联系邮箱:hrwu_ecology@163.com
Shiny平台构建与R包开发(三)——数据输出相关推荐
- Shiny平台构建与R包开发(四)——按钮与响应事件
作为Shiny平台构建与R包开发教程的第四小节,本节向读者进一步强调Shiny server的工作机理,并由此设计按钮点击事件. Shiny server工作机理与问题 前面的几个小节已经向读者初步解 ...
- Shiny平台构建与R包开发(二)——数据输入
作为Shiny平台构建与R包开发教程的第二小节,本节向读者介绍如何利用Shiny server处理用户输入的各种信息.这些信息既包括用户向Shiny上传的数据集,也包括用户对Shiny页面的各种控件( ...
- Shiny平台构建与R包开发
Introduction 在数据库网页搭建教程中已经提到,数据分析决策平台的搭建十分重要.数据库网页是数据分析决策平台的重要表现形式之一,能够很好地将大量数据或其分析结果公开展示,并能提供数据下载.统 ...
- Shiny平台构建与R包开发(七)——Shiny APP部署
本节展示了如何分享和部署Shiny APP.您可以将开发好的Shiny APP部署在自己的服务器上,或是将其部署在公共的平台(即shinyapps.io)上.这里仅分享后者.对于如何将Shiny AP ...
- Shiny平台构建与R包开发(五)——ui美化
本节简单地向读者介绍Shiny APP中ui的美化方法. shinythemes 利用shinythemes包,您可以选择不同的bootstrap风格,并将其应用到Shiny APP中. 安装完shi ...
- Shiny平台构建与R包开发(一)——ui布局
本节为Shiny平台构建与R包开发教程的第一小节. Getting Started 初识Shiny时,了解其工作机理非常重要.下面的案例展示了一个最简单的Shiny APP的工作机理: #DO NOT ...
- R包开发每日中国天气
R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...
- R · R 包开发 | 保姆级教程
R · R 包开发 一般在初始阶段我们都是使用别人的函数来完成大部分任务,那些函数大多来自 R 标准安装的包或者可以从 CRAN 下载的包. 安装新的包可以拓展 R 的功能.比如说,安装 ggplot ...
- r语言 将表格导出为csv_如何将R语言中表格数据输出为Excel文件.pdf
如何将R 语言中的表格数据输出为Excel 文件 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan@126.com /u/Bearjazz 平台的开放性使得R 语言具有了丰富的运算 ...
最新文章
- xp系统web服务器搭建教程,Windows_XP配置WEB服务器教程(图)
- Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)
- 开始使用C++11的9个理由
- pyautogui typewrite_解放双手:Pyautogui帮你work
- 编辑index.html
- java代码实现画板_求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能!...
- CF-1156F Card Bag
- python prettytable格式设置_Python prettytable模
- ArrayList的初始化常用方式,扩容,和应用(去重)
- 基于FTP服务器搭建yum源
- 递增的整数序列链表的插入_leetcode673_go_最长递增子序列的个数
- VMware安装linux镜像
- 致远SPM之CAP数据分析解决方案
- 面试官;经典面试题-JVM篇
- 基于Salt Event系统构建Master端returner
- Android UI基础 仿闲鱼发布页
- Metrics 简介
- Python两台电脑实现TCP通信
- 0.618方法matlab流程图,0.618法的matlab实现
- 黑马程序员_MongoDB笔记
热门文章
- 如何保证MySQL和Redis的数据一致性?
- 媳妇居然在家偷偷背着我偷看我的面试笔记,一个月后拿下大厂offer!(文末送书)...
- 文件 IO 中如何保证掉电不丢失数据?
- 阿里巴巴Druid,轻松实现MySQL数据库加密!
- 从一道面试题谈谈一线大厂码农应该具备的基本能力
- 阿里老员工论坛炫耀:每年税前260万,还有三千万期权在握
- 情侣必做的100件小事,提升幸福感,快收藏
- CPU工作过程——MCU
- 编写MapReduce程序,统计每个买家收藏商品数量,实现统计排序功能
- 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...