R-----shiny包的部分解释和控件介绍

作者:周彦通、贾慧

shinyApp(

ui = fixedPage(

fixedPanel(

top = 50, right=50, width=200, draggable = TRUE, style="padding: 20px; border: 1px solid red;",

"可以移动的框框1"

),

absolutePanel(

top = 150, right=150, width=200, draggable = TRUE, style="padding: 20px; border: 1px solid red;",

"可以移动的框框2"

)

),

server = function(session, input, output) {

})

shinyApp(

ui = fixedPage(

tags$head(

tags$title(‘窗口标题‘),

tags$style(

rel = ‘stylesheet‘,

‘.title-panel {background: #ABCDEF} ‘,

‘.title-panel h2 {text-align:center; color: #FF0000}‘

)

),

div(

class=‘col-md-12 title-panel‘,

h2(‘页面标题‘)

)

),

server = function(input, output, session) {}

)

shinyApp(

ui = fixedPage(

tags$style(

".container div {border: 1px solid gray; min-height:30px;}",

"h4 {color:red; margin-top: 20px;}"

),

h4("两栏模板"),

sidebarLayout(

sidebarPanel("side bar panel"),

mainPanel("main panel")

),

h4("垂直分割模板"),

splitLayout("aaaa", "bbbb", "cccc", "dddd"),

h4("垂直排列模板"),

verticalLayout("aaaa", "bbbb", "cccc", "dddd"),

h4("流式(自动折行)模板"),

flowLayout("aaaa", "bbbb", "cccc", "dddd")

),

server = function(session, input, output) {

}

)

排版样式

shinyApp(

ui = fixedPage(

textInput(‘itx1‘, ‘‘, value=‘1111‘),

textInput(‘itx2‘, ‘‘, value=‘2222‘),

textOutput(‘otx‘, container=pre)

),

server = function(input, output, session) {

output$otx <- renderPrint({

a <- NULL

isolate(a <- input$itx1)

b <- input$itx2

list(a=a, b=b)

})

})

阻止响应

测试

shinyApp(

ui = fixedPage(

h1(‘测试‘), hr(),

radioButtons(‘opts‘, ‘‘, choices = c(‘图像‘, ‘文字‘), inline = T, selected=‘图像‘),

conditionalPanel(

condition = ‘input.opts==="图像"‘,

plotOutput(‘pl‘)

),

conditionalPanel(

condition = ‘input.opts==="文字"‘,

textOutput(‘tx‘, container=pre)

)

),

server = function(input, output, session) {

air <- na.omit(airquality)

pp <- ggplot(air, aes(x=Solar.R, y=Ozone)) + geom_point()

observe({

xtype <- input$opts

if(xtype==‘图像‘) output$pl <- renderPlot({ pp })

else output$tx <- renderPrint({ str(pp) })

})

})

文件上传

shinyApp(

ui = fixedPage(

fileInput(‘f‘, ‘上传文件‘, multi=T, accept=‘text/plain, image/*‘),

textOutput(‘tx‘, container=pre)

),

server = function(input, output, session) {

output$tx <- renderPrint({ str(input$f) })

})

保存

library(‘ggplot2‘)fig.w <- 400fig.h <- 300shinyApp(

ui = fixedPage(

plotOutput(‘pl‘, width=fig.w, height=fig.h),

radioButtons(‘xtype‘, ‘图片格式‘, c(‘png‘, ‘jpeg‘, ‘bmp‘), selected=‘png‘, inline=T),

downloadLink(‘file‘, ‘保存图片‘)

),

server = function(input, output, session) {

air <- na.omit(airquality)

pp <- ggplot(air, aes(x=Solar.R, y=Ozone)) + geom_point()

output$pl <- renderPlot({ pp })

observeEvent(

input$xtype,

output$file <- downloadHandler(

filename = paste0(‘plot.‘, input$xtype),

content = function(file) {

image <- switch(input$xtype,

png=png, jpeg=jpeg, bmp=bmp)

image(file, width=fig.w, height=fig.h)

print(pp)

dev.off()

}

)

)

})

控件

shinyApp(

ui = fixedPage(

h2(‘输入控件演示‘),

hr(),

sidebarLayout(

sidebarPanel(

textInput(‘tx‘, ‘文字输入‘, value=‘abc‘),

checkboxGroupInput(‘cg‘, ‘选项组‘, choice=LETTERS[1:4], selected=c(‘A‘, ‘D‘), inline=TRUE),

sliderInput(‘sl‘, ‘滑动选数‘, min=1, max=10, value=6),

HTML(‘<label for="tt">文本框输入</label>‘,

‘<textarea id="tt" class="form-control" style="resize:none"></textarea>‘

),

HTML(‘<label for="clx">颜色选取</label>‘,

‘<input id="clx" type="color" class="form-control" value="#FF0000">‘,

‘<input id="cl" type="text" class="form-control" value="#FF0000" style="display:none">‘,

‘<script>‘,

‘$(function(){$("#clx").change(function(){$("#cl").val($(this).val()).trigger("change");});})‘,

‘</script>‘

)

),

mainPanel(

HTML(‘<textarea id="ta" class="form-control shiny-text-output"‘,

‘style="resize:none; height:200px;" readonly></textarea>‘

)

)

)

),

server = function(input, output, session) {

output$ta <- renderText({

paste(c(input$tx, input$tt, paste(input$cg, collapse=‘; ‘),

input$sl, input$cl), collapse=‘\n‘)

})

observe({

updateTextInput(session, inputId=‘tt‘, value=paste(‘文本输入:‘, input$tx))

})

})

Shiny、输出语法

shinyApp(

ui = fixedPage(

textOutput(‘tx‘, container=h1),

plotOutput(‘pl‘, width=‘100%‘, height=‘400px‘)

),

server = function(input, output, session) {

output$tx <- renderText({

"这是服务器输出的文字"

})

output$pl <- renderPlot({

a <- rnorm(20)

par(mar=c(3, 3, 0.5, 0.5), mgp=c(2, 0.5, 0))

plot(a)

})

})

函数xxxOutput和renderXXX函数

ls("package:shiny", pattern="Output$")

ls("package:shiny", pattern="^render")

renderXXX函数的一般形式是:

renderXXX(expr, ...)

(红色不分为关键参数)

更新输入演示案列

Server。R

function(input, output, clientData, session) {

observe({

# We‘ll use these multiple times, so use short var names for

# convenience.

c_label <- input$control_label

c_num <- input$control_num

# Text =====================================================

# Change both the label and the text

updateTextInput(session, "inText",

label = paste("New", c_label),

value = paste("New text", c_num)

)

# Number ===================================================

# Change the value

updateNumericInput(session, "inNumber", value = c_num)

# Change the label, value, min, and max

updateNumericInput(session, "inNumber2",

label = paste("Number ", c_label),

value = c_num, min = c_num-10, max = c_num+10, step = 5)

# Slider input =============================================

# Only label and value can be set for slider

updateSliderInput(session, "inSlider",

label = paste("Slider", c_label),

value = c_num)

# Slider range input =======================================

# For sliders that pick out a range, pass in a vector of 2

# values.

updateSliderInput(session, "inSlider2",

value = c(c_num-1, c_num+1))

# An NA means to not change that value (the low or high one)

updateSliderInput(session, "inSlider3",

value = c(NA, c_num+2))

# Date input ===============================================

# Only label and value can be set for date input

updateDateInput(session, "inDate",

label = paste("Date", c_label),

value = paste("2013-04-", c_num, sep=""))

# Date range input =========================================

# Only label and value can be set for date range input

updateDateRangeInput(session, "inDateRange",

label = paste("Date range", c_label),

start = paste("2013-01-", c_num, sep=""),

end = paste("2013-12-", c_num, sep=""),

min = paste("2001-01-", c_num, sep=""),

max = paste("2030-12-", c_num, sep="")

)

# # Checkbox ===============================================

updateCheckboxInput(session, "inCheckbox",value = c_num %% 2)

# Checkbox group ===========================================

# Create a list of new options, where the name of the items

# is something like ‘option label x A‘, and the values are

# ‘option-x-A‘.

cb_options <- list()

cb_options[[paste("option label", c_num, "A")]] <-

paste0("option-", c_num, "-A")

cb_options[[paste("option label", c_num, "B")]] <-

paste0("option-", c_num, "-B")

# Set the label, choices, and selected item

updateCheckboxGroupInput(session, "inCheckboxGroup",

label = paste("checkboxgroup", c_label),

choices = cb_options,

selected = paste0("option-", c_num, "-A")

)

# Radio group ==============================================

# Create a list of new options, where the name of the items

# is something like ‘option label x A‘, and the values are

# ‘option-x-A‘.

r_options <- list()

r_options[[paste("option label", c_num, "A")]] <-

paste0("option-", c_num, "-A")

r_options[[paste("option label", c_num, "B")]] <-

paste0("option-", c_num, "-B")

# Set the label, choices, and selected item

updateRadioButtons(session, "inRadio",

label = paste("Radio", c_label),

choices = r_options,

selected = paste0("option-", c_num, "-A")

)

# Select input =============================================

# Create a list of new options, where the name of the items

# is something like ‘option label x A‘, and the values are

# ‘option-x-A‘.

s_options <- list()

s_options[[paste("option label", c_num, "A")]] <-

paste0("option-", c_num, "-A")

s_options[[paste("option label", c_num, "B")]] <-

paste0("option-", c_num, "-B")

# Change values for input$inSelect

updateSelectInput(session, "inSelect",

choices = s_options,

selected = paste0("option-", c_num, "-A")

)

# Can also set the label and select an item (or more than

# one if it‘s a multi-select)

updateSelectInput(session, "inSelect2",

label = paste("Select label", c_label),

choices = s_options,

selected = paste0("option-", c_num, "-B")

)

# Tabset input =============================================

# Change the selected tab.

# The tabsetPanel must have been created with an ‘id‘ argument

if (c_num %% 2) {

updateTabsetPanel(session, "inTabset", selected = "panel2")

} else {

updateTabsetPanel(session, "inTabset", selected = "panel1")

}

})}

ui.R

fluidPage(

titlePanel("Changing the values of inputs from the server"),

fluidRow(

column(3, wellPanel(

h4("These inputs control the other inputs on the page"),

textInput("control_label",

"This controls some of the labels:",

"LABEL TEXT"),

sliderInput("control_num",

"This controls values:",

min = 1, max = 20, value = 15)

)),

column(3, wellPanel(

textInput("inText",  "Text input:", value = "start text"),

numericInput("inNumber", "Number input:",

min = 1, max = 20, value = 5, step = 0.5),

numericInput("inNumber2", "Number input 2:",

min = 1, max = 20, value = 5, step = 0.5),

sliderInput("inSlider", "Slider input:",

min = 1, max = 20, value = 15),

sliderInput("inSlider2", "Slider input 2:",

min = 1, max = 20, value = c(5, 15)),

sliderInput("inSlider3", "Slider input 3:",

min = 1, max = 20, value = c(5, 15)),

dateInput("inDate", "Date input:"),

dateRangeInput("inDateRange", "Date range input:")

)),

column(3,

wellPanel(

checkboxInput("inCheckbox", "Checkbox input",

value = FALSE),

checkboxGroupInput("inCheckboxGroup",

"Checkbox group input:",

c("label 1" = "option1",

"label 2" = "option2")),

radioButtons("inRadio", "Radio buttons:",

c("label 1" = "option1",

"label 2" = "option2")),

selectInput("inSelect", "Select input:",

c("label 1" = "option1",

"label 2" = "option2")),

selectInput("inSelect2", "Select input 2:",

multiple = TRUE,

c("label 1" = "option1",

"label 2" = "option2"))

),

tabsetPanel(id = "inTabset",

tabPanel("panel1", h2("This is the first panel.")),

tabPanel("panel2", h2("This is the second panel."))

)

)

))

首先需要将ui.R和server.R两个代码保存为文件放在同一个文件夹下,然后就可以调用这个app了。

如果变量的值不使用input列表,这里有两种赋值方法:

server = function(input, output, session) {

var1 <- list(a=1, b=2, c=3)

var2 <- reactiveValues(a=1, b=2, c=3)}

时间: 2024-10-19 17:17:56

R-----shiny包的部分解释和控件介绍的相关文章

Android学习笔记--design包下的两个控件

今天学习了design包下的两个控件,记录一下,首先需要我们依赖 1 compile 'com.android.support:design:25.0.0' 之后在XML文件中就可以使用了 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 x

Android support library支持包常用控件介绍(二)

谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library 支持库,让开发者更容易的实现材料设计的效果.顺便推荐官方的一个图标库:Material Icons 控件名称 NavigationView FloatingActionButton TextInputLayout Snackbar TabLayout AppBarLayout Coordinator

Android控件介绍

Android控件介绍 多选按钮(CheckBox) CheckBox有两个常用的事件,OnClickListener事件和OnClickChangeListener事件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_w

HTML 基础控件介绍

HTML 基础控件介绍 主要介绍 input.select.textarea.label.fieldset.ul.ol.li等标签 目录 1. <input>标签:主要用于收集用户信息,可根据不同的type属性值,拥有多种形式. 2. <select>标签:可创建单选或多选菜单,类似于winform的combox或listbox. 3. <textarea>标签:多行文本区域. 4. <label>标签:相当于一个展示文本框. 5. <fieldset

amCharts 金融图表股票走势K线图控件介绍

amCharts控件股票走势图的主要目的是为了显示金融图表,但它可以用于任何日期(时间)为基础的数据可视化. 股票走势图,是一个功能强大的应用程序,让你忘了最枯燥的部分构建复杂的统计系统.它具有内置的期间和数据集选择工具,并能较长组数据.这使您可以向下钻取图表不用任何额外的编码,只使用一个数据文件.单击"最大"按钮下面的图表,你会发现该图表显示月度数据.点击"1月"的按钮,你会看到,现在的图表显示每天的数据. 主要特点: 支持线,柱,烛台,OHLC,步线的图表类型.

SharePoint统计图表控件Nevron Chart for SharePoint控件介绍

Nevron Chart for SharePoint是一个先进的图表Web部件,其能为您的SharePoint站点提供一整套的2D和3D图表类型,高度可自定义的轴,先进的数据分析功能,严密的数据集成和无与伦比的视觉效果.其组合了业内领先的Nevron Charting engine for ASP.NET以及Nevron Pivot Data Aggregation engine.这使得用户能在SharePoint环境中直观的完成复杂的透视图表的创建. 主要功能: 支持SharePoint S

WPF Step By Step 控件介绍

WPF Step By Step 控件介绍 回顾 上一篇,我们主要讨论了WPF的几个重点的基本知识的介绍,本篇,我们将会简单的介绍几个基本控件的简单用法,本文会举几个项目中的具体的例子,结合这些 例子,希望我们可以对WPF的掌握会更深刻.本文涉及的内容可能较多.请大家慢慢看看.错误之处,还请指出. 本文大纲 1.基本控件介绍与用法. 基本控件介绍与用法 文本控件 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label

Barcode Professional for ASP.NET ASP.NET条码生成和打印功控件介绍

Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET Mobile Web站点). 具体功能: Neodynamic Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET

Essential HTMLUI 浏览器控件介绍及下载

Essential HTMLUIfor Windows Forms是一款WinForm控件用于呈现HTML,功能很像一个Web浏览器,支持各种各样的HTML标签,可以显示丰富的HTML文档,支持导出和打印. 具体功能: HTMLUI是一款完全与浏览器独立的控件,支持以URL的形式打开HTML 支持从用户驱动器路里加载任何HTML页面 支持使用图片代替文本用于连接到其他文件 支持以流的形式加载HTML文档 支持各种各样的HTML标签,格式化相关的标签 支持外部的.内在的.内嵌的样式,支持在运行时添