应用的格式和启动

你也许注意到了,Shiny应用的定义和启动方式有不止一种。有的时候你会在server.R文件里看到shinyServer(),同样也会在ui.R文件里看到shinyUI()。有的时候却根本找不到server.R文件。

本文概述了定义和启动Shiny应用的不同方法。


server.R和ui.R文件

大多数早期的Shiny样例中会包含一个server.R文件和一个ui.R文件,比如下面这个:

## server.R ##
function(input, output) {output$distPlot <- renderPlot({hist(rnorm(input$obs), col = 'darkgray', border = 'white')})
}
## ui.R ##
fluidPage(sidebarLayout(sidebarPanel(sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)),mainPanel(plotOutput("distPlot")))
)

对于以这种方式定义的应用,server.R文件必须返回一个server函数,ui.R文件必须返回一个UI对象(本例中的UI对象是由fluidPage()创建的)。换句话说,如果文件中包含其他代码(比如公共函数(utility function)),你就必须保证这个文件最后的语句是server函数或者UI对象。

要想更深入的了解这方面内容,请参看这个关于 双文件应用 的文章。


shinyServer()和shinyUI()

对于Shiny 0.10之前的版本,server.R和ui.R分别需要调用shinyServer()和shinyUI()。稍早的Shiny应用样例看起来也许会是下面这样。它们其实和之前的例子是一样的,只有一点,在下面的例子里,代码被放在shinyServer()和shinyUI()里了:

## server.R ##
shinyServer(function(input, output) {output$distPlot <- renderPlot({hist(rnorm(input$obs), col = 'darkgray', border = 'white')})
})
## ui.R ##
shinyUI(fluidPage(sidebarLayout(sidebarPanel(sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)),mainPanel(plotOutput("distPlot")))
))

至于Shiny 0.10之后的版本,就不需要再这样做了。


app.R

Shiny 0.10.2版本就可以在一个文件里创建应用了——app.R,这个文件同时包含了UI和server代码。它必须返回一个由shinyApp()函数创建的对象。

## app.R ##
server <- function(input, output) {output$distPlot <- renderPlot({hist(rnorm(input$obs), col = 'darkgray', border = 'white')})
}ui <- fluidPage(sidebarLayout(sidebarPanel(sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)),mainPanel(plotOutput("distPlot")))
)shinyApp(ui = ui, server = server)

This method is more appropriate for smaller applications; for larger applications, you may find that having separate ui.R and server.R files makes your code easier to manage.

这个办法对于体量较小的应用更为合适;对于体量较大的应用,使用双文件(ui.R和server.R)会更方便。


session和clientData(参数)

在一些样例的server代码中,你也许会看到这样的代码:

function(input, output) { .... }

在其他的一些例子里,你也许会在server function里看到第三个叫做session的参数:

function(input, output, session) { .... }

这个session参数是可选的,仅当你想要使用高级Shiny特性的时候才使用它——有些Shiny函数会将session变量当作一个参数。

同样地,你也许在一些旧样例中看到server function把clientData当作参数。clientData提供了连接和web页面上元素可见性的信息(详见 clientdata)。

但是现在已经不需要clientData这个参数了,因为你可以通过session的session$clientData参数实现同样的功能。为了代码的连贯性,我们推荐你使用session$clientData参数。

# These two server functions do the same thing
# 这两个server functions 的功能是一样的# Using the clientData argument directly (older examples)
# 直接使用clientData参数(旧例)
function(input, output, clientData) {output$txt <- renderPrint({clientData})
}# Using the session argument
# 使用session参数
function(input, output, session) {output$txt <- renderPrint({session$clientData})
}

调用runApp()的方法

这几样东西也许会在启动一个应用的时候被传输到runApp()中。


App目录

如果你的应用在目录 myapp/ 下,你可以这样启动它:

runApp("myapp")

Shiny app对象

如果你在控制台使用shinyApp()创建了一个app对象,你可以将这个对象传给runApp():

# Create app object (assume ui and server are defined above)
app <- shinyApp(ui, server)runApp(app)

此外,如果你只是在控制台写下应用然后按回车键,R一样会启动这个应用。这是因为当你在控制台运行代码的时候,R会调用print()来显示返回值,对于Shiny app对象,print()方法会调用runApp()。所以你可以这样来启动应用:

app <- shinyApp(ui, server)
app

list(ui,server)

另一个启动应用的方法是传递给runApp()一个包含ui和server组件的列表(list)。这是上面的Shiny app对象方法的旧形式。

# (Assume ui and server are defined above)
runApp(list(ui, server))

[译]R语言——Shiny框架之构建(一):1.结构——1.独立应用程序——1.应用的格式和启动相关推荐

  1. [译]R语言——Shiny框架之构建(一):1.结构——1.独立应用程序——2.双文件式Shiny应用

    双文件式Shiny应用 在版本0.10.2之前,Shiny应用需要两个独立文件:server.R和ui.R,这两个文件分别包含了构成UI和server模块的代码.这种形式在后来的版本中依然是可用的. ...

  2. [译]R语言——Shiny框架之入门(二):如何构建一个Shiny应用

    注:以下内容是我个人翻译自Rstudio官网的Shiny教程,原文地址:http://shiny.rstudio.com/articles/build.html 水平有限,敬请谅解 在开始之前,先简单 ...

  3. [译]R语言——Shiny框架之入门(三):如何启动一个Shiny应用

    如何启动一个Shiny应用 在前两篇文章里[1,2],你已经可以通过调用runApp()函数来运行样例应用了.这个函数运行了应用并将它在你的默认浏览器里显示了出来.这个函数的调用是模块化的(block ...

  4. R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms )构建回归模型、通过method参数指定算法名称

    R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms  )构建回归模型.通过method参数指定算法名称.通过trainControl函数控 ...

  5. R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...

  6. R语言使用caret包构建岭回归模型(Ridge Regression )构建回归模型、通过method参数指定算法名称、通过trainControl函数控制训练过程

    R语言使用caret包构建岭回归模型(Ridge Regression )构建回归模型.通过method参数指定算法名称.通过trainControl函数控制训练过程 目录

  7. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数

    R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录

  8. R语言使用caret包构建gbdt模型(随机梯度提升树、Stochastic Gradient Boosting )构建回归模型、通过method参数指定算法名称

    R语言使用caret包构建gbdt模型(随机梯度提升树.Stochastic Gradient Boosting )构建回归模型.通过method参数指定算法名称 目录

  9. R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释一个iris数据样本的预测结果、LIME解释器进行模型预测结果解释并可视化

    R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释一个iris数据样本的预测结果.LIME解释器进行模型预测结果解释并可视化 ...

最新文章

  1. Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
  2. mysql could not create connection_mysql8.0 Could not create connection to database server.解决办法...
  3. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)
  4. 一个例子让你了解Java反射机制
  5. 排序算法以及其java实现
  6. 开发罪过_七大罪过与如何避免
  7. Java文档阅读笔记-Spring Boot JDBC
  8. python三维圆曲面_python – matplotlib中的曲面和三维轮廓
  9. matlab中怎么画五维图,使用MatLab绘制散点图的方法
  10. 如何将Excel表格随机打乱顺序
  11. Java处理多个List集合中对象数据合并处理数据后为同一个List集合对象
  12. Google Pixel 刷机、OpenGApps和系统分区扩容
  13. Java开发实习经历01——寻找到入职(真实实习经历,希望对各位有帮助)
  14. 2022年江西最新建筑八大员(质量员)模拟考试题库及答案解析
  15. 2017.3.15 贾老分享有感
  16. JDBC与ORM发展与联系 JDBC简介(九)
  17. Doodle era
  18. div内容文字自适应
  19. 网吧母盘制作其本流程
  20. 免堆期由谁申请_集装箱免柜免堆期是啥意思?应该怎么申请?

热门文章

  1. python魔法方法和普通方法_Python魔法方法之属性访问详解!
  2. java命令行参数_一个 java 命令行参数顺序的坑
  3. nginx 集群部署_Nginx Ingress on TKE 部署最佳实践
  4. python selenium环境安装及配置_selenium环境配置
  5. python代码转换为pytorch_python基础教程Pytorch之Tensor和Numpy之间的转换的实现方法...
  6. python 最小二乘法三维坐标拟合平面_【MQ笔记】超简单的最小二乘法拟合平面(Python)...
  7. latex数学公式符号 + markdown操作(图片的缩放、居中等)
  8. Youki的C++命名规则
  9. python 绘图中设置颜色对比强烈的组合
  10. matplotlib 绘图代码库(自用)