2013-07-02 11 views
5

'daki reaktif verilerden() çağrıda bulunun Reaktif bir ifade içinde belirli bir değişkeni çağırmak istiyorum. Böyle bir şey:R Shiny App

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 
}) 
}) 

Ne yazık ki data() içinde asc_new1 ve asc_new2 aramak için öğrenmek could't

server.R. Bu seferki çalışmaz:

data()$asc_new1 

cevap

9

Reaktifleri sadece sen bunu yapamaz R. diğer işlevler gibidir:

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

f()$x 

Yani output$Plot() içinde konum ne ya çalışmaz. data()'dan bir liste döndürerek istediğinizi yapabilirsiniz. Şimdi

data <- reactive({ 

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

}) 

Yapabileceğiniz:

data()$asc_new1 
+0

Bazı nedenlerle hala aynı hatayı alıyorum. Variabale'imi bir 'list' olarak ekledim ama yine de diyemiyorum: 'Veride hata() $ fitnew: Bu S4 sınıfı için tanımlanmamış $ operatörü ' –

+0

Kesinlikle' listeyi 'son olarak koyuyor musunuz? veri() 'işlevinin satırı? Bu iade edilecek olan şey. – MadScone

+0

Şimdi çalışıyor! Çok teşekkürler! –

0

"data()$asc_new1 ile alışkanlık (en azından şu anki parlak sürümü ile) reactive bağlam oluşturdu değişkenlerde erişmek mümkün Sen data()[1]data()[2] gerekir. Eğer MadScone gibi bir listeye koyarsanız, $ işareti ile arama yapmak

Uyarı: Gözlemci işlenmeyen hatası: hata senin verilerinde

Hata() $ fitnew alma $ operatörü atom vektörler Ancak

geçersizdir: $ operatörü bu S4 sınıfı için tanımlı değil

yalnızca değişkene yanlış eriştiğiniz için değil.işlevinizin data işlevinin adını, R numaralı adada ayrılmış bir ad olarak adlandırdınız. Bunu myData ya da bir şeyle değiştirmek istersiniz.