R 中的反应性问题 - 你试图做一些只能从反应性消费者内部完成的事情
Posted
技术标签:
【中文标题】R 中的反应性问题 - 你试图做一些只能从反应性消费者内部完成的事情【英文标题】:Issues with reactivity in R - You tried to do something that can only be done from inside a reactive consumer 【发布时间】:2022-01-18 19:12:25 【问题描述】:我试图通过动态日期和代码选择将此代码置于 Shiny 中,但我收到以下错误 Operation not allowed without an active reactive context。 你试图做一些只能在响应式消费者内部完成的事情。
library(quantmod)
library(PerformanceAnalytics)
dt <- "2017-2-1"
aapl <- getSymbols.yahoo("AAPL", from=dt, auto.assign = F)
aaplClose <- getSymbols.yahoo("AAPL", from=dt, auto.assign = F)[,6]
aaplRets <- na.omit(dailyReturn(aaplClose, type="log"))
这是我的闪亮实现
library(shiny)
library(quantmod)
library(PerformanceAnalytics)
#dt <- "2017-2-1"
ui <- fluidPage(
dateInput("dt", "Select a date:"),
textInput("tkr", "Enter a ticker symbol"),
plotOutput("myplot")
)
server <- function(input, output, session)
aapl <- reactive (
getSymbols.yahoo(input$tkr, from=input$dt, auto.assign = F)
)
aaplClose <- reactive (
getSymbols.yahoo(input$tkr, from=input$dt, auto.assign = F)[,6]
)
aaplRets <- na.omit(dailyReturn(aaplClose(), type="log"))
output$myplot <- renderPlot(
chartSeries(aapl())
)
shinyApp(ui, server)
【问题讨论】:
aaplRets <- na.omit(dailyReturn(aaplClose(), type="log"))
是导致您的问题的行。 aaplClose()
是被动的。这表明aaplRets
也应该如此。这样做可以解决问题。
【参考方案1】:
由于您有一个文本输入来选择股票代码,因此数据不应称为苹果,因为它可以是一切。将所有内容保存在响应式上下文中:
library(shiny)
library(quantmod)
library(PerformanceAnalytics)
ui <- fluidPage(
dateInput("dt", "Select a date:", value = "2017-2-1"),
textInput("tkr", "Enter a ticker symbol", value = "AAPL"),
plotOutput("myplot")
)
server <- function(input, output, session)
data <- reactive(
getSymbols.yahoo(input$tkr, from = input$dt, auto.assign = F)
)
output$myplot <- renderPlot(
chartSeries(data())
)
shinyApp(ui, server)
或者用字母表:
【讨论】:
以上是关于R 中的反应性问题 - 你试图做一些只能从反应性消费者内部完成的事情的主要内容,如果未能解决你的问题,请参考以下文章