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 &lt;- 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 中的反应性问题 - 你试图做一些只能从反应性消费者内部完成的事情的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中反应性地做多个情节?

复选框 Shiny R 的反应性 k 均值分析

从刀片 Laravel 传递时,Prop 反应性不起作用

类中的vue3反应性

如何在 Shiny 中引用 ui.R 中的反应元素

R Shiny:如何使多个元素在添加/删除按钮上下文中具有反应性?