Sto scrivendo un'app lucida in cui l'output dovrebbe dipendere dal valore di una variabile che viene calcolata in un'espressione reattiva in lucido. Invece di riprodurre l'applicazione effettiva credo di aver ricreato il mio problema con il seguente semplice applicazione:Utilizzo di un'espressione reattiva in un'istruzione if in lucido
ui.R file:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Illustrating problem"),
sidebarPanel(
numericInput('id1', 'Numeric input, labeled id1', 0, min = 0, max = 100, step =5)
),
mainPanel(
h4('You entered'),
verbatimTextOutput("oid1"),
verbatimTextOutput("odic")
)
))
server.R file
library(shiny)
shinyServer(
function(input, output) {
output$oid1 <- renderPrint({input$id1})
x<-reactive({5*input$id1})
if (x()>50) output$oid2<-renderPrint({"You entered a number greater than 10"})
else output$oid2<-renderPrint({"You entered a number less than or equal to
10"})
}
)
Se l'eseguo come questo allora ottengo l'errore: Errore in.getReactiveEnvironment()$currentContext()
: `
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
Se cambio l'istruzione if a: if (x>50)
... tanto sono l'errore:
Error in x > 50 : comparison (6) is possible only for atomic and list types
Quando cambio l'istruzione if a: if (reactive({(x>50)}))
... tanto sono il messaggio di errore:
Error in if (reactive({ : argument is not interpretable as logical
Apprezzerei molto di aiuto
Si ottiene un punto di troppo, per lo sforzo di screenshot ... BTW non credo che è incoraggiato, ma puoi certamente mettere le dichiarazioni di output all'interno di un osservatore/reattivo. Ma non dovrebbe –
Grazie per le tue spiegazioni. Il mio problema è che nella mia app effettiva ho un sacco di comandi all'interno delle istruzioni if else e non è un singolo comando renderPrint. Qualche idea su come farlo? – MSR
Vedere le mie modifiche sopra. –