2013-07-02 15 views
5

Vorrei chiamare una certa variabile all'interno di un'espressione reattiva. Qualcosa di simile a questo:Call Variable from reactive data() in R Shiny App

server.R

library(raster) 

shinyServer(function(input, output) { 

data <- reactive({ 
inFile <- input$test #Some uploaded ASCII file 
asc <- raster(inFile$datapath) #Reads in the ASCII as raster layer 

#Some calculations with 'asc': 

asc_new1 <- 1/asc 
asc_new2 <- asc * 100 
}) 

output$Plot <- renderPlot({ 

inFile <- input$test 
if (is.null(inFile) 
return (plot(data()$asc_new1)) #here I want to call asc_new1 
plot(data()$asc_new2)) #here I want to call asc_new2 
}) 
}) 

Purtroppo ho potuto't scoprire come chiamare asc_new1 e asc_new2 all'interno data(). Questo non funziona:

data()$asc_new1 

risposta

9

Reattivi sono proprio come le altre funzioni in R. Non si può fare questo:

f <- function() { 
    x <- 1 
    y <- 2 
} 

f()$x 

Allora, cosa si è all'interno output$Plot() non funzionerà neanche. Puoi fare ciò che vuoi restituendo un elenco da data().

data <- reactive({ 

    inFile <- input$test 
    asc <- raster(inFile$datapath) 
    list(asc_new1 = 1/asc, asc_new2 = asc * 100) 

}) 

Ora si può fare:

data()$asc_new1 
+0

Per qualche motivo ottengo ancora lo stesso errore. Ho inserito il mio variabale in un 'elenco', ma non riesco ancora a chiamarlo:' Errore nei dati() $ fitnew: $ operatore non definito per questa classe S4' –

+0

Stai sicuramente mettendo la 'lista' sull'ultimo linea della funzione 'data()'? Questo è ciò che verrà restituito. – MadScone

+0

Funziona ora! Molte grazie! –

0

"Con data()$asc_new1 è solito essere in grado di accedere al nelle variabili reactive contesto create (almeno con la versione lucida corrente) È necessario data()[1]data()[2]. se lo metti in un elenco come MadScone, chiamandolo con il numero $ aumenterebbe

Attenzione: errore non gestito in osservatore: $ operatore non è valido per i vettori atomiche

Tuttavia, l'errore vostro ottenere

Errore nei dati() $ fitnew: $ operatore non definito per questa classe S4

non è solo perché si accede alla variabile errata. Hai chiamato l'output della tua funzione reactivedata che è il nome riservato in R. Volete cambiarlo a myData o qualcosa del genere.