R海拾遗-shiny4
R海拾遗-shiny4
概述
shiny基础终章,shiny反应表达式学习
代码
在工作目录中创建一个名为stockVis的新文件夹 下载以下文件放在stockVis中 app.R:https://shiny.rstudio.com/tutorial/written-tutorial/lesson6/stockVis/app.R helper.R:https://shiny.rstudio.com/tutorial/written-tutorial/lesson6/stockVis/helpers.R 使用runApp启动应用程序runApp("stockVis")
setwd("D:\360MoveData\Users\cmusunqi\Documents\GitHub\R_and_python\R")
library(shiny)
runApp("stockVis")
结果
这个stockvis展示的内容
- 选择一只股票
- 选择日期展示
- 选择是否将x轴log转换
- 是否通过通货膨胀对股票价格进行调整
默认情况下,stockVis会显示SPY代码(整个标普500的指数)。要查找不同的股票,请键入雅虎财经能够识别的股票符号。如GOOG(谷歌)、AAPL (Apple)和GS (Goldman Sachs)
注意到的一点是目前默认的app展示时的adjust prices for infaltion 目前是不可选的状态
stockVis依赖quantmod包中的两个功能:
- getSymbols: 直接从雅虎财经和圣路易斯联邦储备银行等网站下载金融数据。
- chartSeries 图表中显示价格
同时需要使用helps.r脚本,脚本包含一个根据通货膨胀调整股票价格的函数。
解析app.r包
# 导入包
library(shiny)
# 导入需要计算的函数
library(quantmod)
# 导入计算通货膨胀的函数 ----
source("helpers.R")
#ui函数编写
ui <- fluidPage(
# 标题
titlePanel("stockVis"),
# 工具条设计
sidebarLayout(
sidebarPanel(
# 帮助文本
helpText("Select a stock to examine.
Information will be collected from Yahoo finance."),
# 输入文本
textInput("symb", "Symbol", "SPY"),
# 日期选择框
dateRangeInput("dates",
"Date range",# 框名
start = "2013-01-01",
end = as.character(Sys.Date())),
br(),
br(),
# 复选框
checkboxInput("log", "Plot y axis on log scale",
value = FALSE),
# 复选框
checkboxInput("adjust",
"Adjust prices for inflation", value = FALSE)
),
# 主要绘图区域
mainPanel(plotOutput("plot"))
)
)
# 服务代码
server <- function(input, output) {
# 反应表达式
dataInput <- reactive({
getSymbols(input$symb, src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
})
output$plot <- renderPlot({
chartSeries(dataInput(), theme = chartTheme("white"),
type = "line", log.scale = input$log, TA = NULL)
})
}
# 运行
shinyApp(ui, server)
目前的程序有个问题,当你选择第一个框的时候,shiny会重新从雅虎获得数据,相当于运行了下面的程序,并重新绘制图片,这可能会导致运算变慢,同时雅虎会认为数据异常,从而封闭访问
output$plot <- renderPlot({
data <- getSymbols(input$symb, src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
chartSeries(data, theme = chartTheme("white"),
type = "line", log.scale = input$log, TA = NULL)
})
因此需要使用到反应表达式
dataInput <- reactive({
getSymbols(input$symb, src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
})
反应表达式可以缓存值,并知道值何时已经过时。 第一次运行反应表达式时,该表达式将其结果保存在计算机的内存中。下一次调用响应表达式时,它可以返回这个保存的结果,而不进行任何计算,这会使应用程序更快
添加代码使得第二个复选框工作
server <- function(input, output) {
dataInput <- reactive({
getSymbols(input$symb, src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE)
})
finalInput <- reactive({
if (!input$adjust) return(dataInput())
adjust(dataInput())
})
output$plot <- renderPlot({
chartSeries(finalInput(), theme = chartTheme("white"),
type = "line", log.scale = input$log, TA = NULL)
})
}
结束语
反应表达式reactive({})
,提高计算效能,到这里基本上关于shiny的基础教程已经更新完毕,后续看看有没有大的项目玩一玩,可惜最近服务器不给力,深度学习的东西没法开展,就说这么多吧,love&peace
甜言蜜语最危险的 很多人看不开,也不体面 因小失大
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP hebrev()函数用法讲解
- PHP hex2bin()函数用法讲解
- PHP+jQuery实现即点即改功能示例
- PHP html_entity_decode()函数讲解
- PHP下载大文件失败并限制下载速度的实例代码
- thinkphp5框架实现的自定义扩展类操作示例
- python导入库的具体方法
- PHP+jQuery实现双击修改table表格功能示例
- 基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
- Laravel推荐使用的十个辅助函数
- PHP htmlentities()函数用法讲解
- thinkphp5框架API token身份验证功能示例
- PHP基于mcript扩展实现对称加密功能示例
- php和asp语法上的区别总结
- 解决python pandas读取excel中多个不同sheet表格存在的问题