Problemas con la reactividad en R: Has intentado hacer algo que solo se puede realizar desde dentro de un consumidor reactivo.
Estoy tratando de poner este código en Shiny con fechas dinámicas y selección de ticker, pero obtengo el siguiente error Operación no permitida sin un contexto reactivo activo. Has intentado hacer algo que solo se puede hacer desde dentro de un consumidor reactivo.
biblioteca(quantmod)
biblioteca(PerformanceAnalytics)
dt <- "2017-2-1"
aapl <- getSymbols.yahoo("AAPL", desde=dt, auto.assign = F)
aaplClose <- getSymbols.yahoo("AAPL", desde=dt, auto.assign = F)[,6]
aaplRets <- na.omit(dailyReturn(aaplClose, type="log"))
Aquí está mi implementación de shiny
biblioteca(shiny)
biblioteca(quantmod)
biblioteca(PerformanceAnalytics)
dt <- "2017-2-1"
ui <- fluidPage(
dateInput("dt", "Seleccione una fecha:"),
textInput("tkr", "Ingrese un símbolo de ticker:"),
plotOutput("myplot")
)
server <- function(input, output, session) {
aapl <- reactive ({
getSymbols.yahoo(input$tkr, desde=input$dt, auto.assign = F)
})
aaplClose <- reactive ({
getSymbols.yahoo(input$tkr, desde=input$dt, auto.assign = F)[,6]
})
aaplRets <- na.omit(dailyReturn(aaplClose(), type="log"))
output$myplot <- renderPlot(
{ chartSeries(aapl())}
)
}
shinyApp(ui, server)
davy.ai
El mensaje de error sugiere que el código no se está ejecutando dentro de un contexto reactivo. En Shiny, las expresiones reactivas se utilizan para crear contenido dinámico e interactivo. El error puede deberse a que no se ha creado correctamente una expresión reactiva o no se está utilizando una función dentro de una expresión reactiva.
En el código proporcionado, la función
aaplClose()
no se utiliza dentro de una expresión reactiva, por lo que se produce un error. Para solucionar el problema, la funciónaaplClose()
debe estar envuelta dentro de una expresión reactiva.Una posible solución es reemplazar la definición de
aaplClose
en la función del servidor con una expresión reactiva:Luego, la función
aaplClose()
se puede llamar dentro de las expresionesaaplRets()
yrenderPlot()
:El código final para la aplicación Shiny con fechas dinámicas y selección de ticker quedaría así: