2013-07-16 22 views
8

में वैश्विक वस्तु सेट मान लीजिए कि मैं चमकदार में निम्नलिखित server.R फ़ाइल करते हैं:चमकदार

shinyServer(function(input, output) { 
    output$plot <- renderPlot({ 
    data2 <- data[data$x == input$z, ] # subsetting large dataframe 
    plot(data2$x, data2$y) 
    }) 
    output$table <- renderTable({ 
    data2 <- data[data$x == input$z, ] # same subset. Oh, boy... 
    summary(data2$x) 
    }) 
}) 

क्या मैं नहीं करने के लिए क्या कर सकते हैं हर कॉल प्रस्तुत करना भीतर data2 <- data[data$x == input$z, ] चलाने के लिए है? अगर मैं निम्नलिखित करते हैं, मैं एक "प्रकार 'बंद' की वस्तु subsettable नहीं है" मिल त्रुटि:

shinyServer(function(input, output) { 
    data2 <- reactive(data[data$x == input$z, ]) 
    output$plot <- renderPlot({ 
    plot(data2$x, data2$y) 
    }) 
    output$table <- renderTable({ 
    data2 <- data[data$x == input$z, ] 
    summary(data2$x) 
    }) 
}) 

क्या मैं गलत क्या किया?

उत्तर

17

data2 एक ऐसा फ़ंक्शन है जो आप जिस सब्सक्राइब की तलाश में है उसे लौटाता है। तो तुम, data2 कॉल करने के लिए और कुछ चर करने के लिए उत्पादन को बचाने तो आप प्लॉट कर सकते हैं/संक्षेप में प्रस्तुत विभिन्न स्तंभों

## data should be defined somewhere up here or in global.R 

shinyServer(function(input, output) { 
    data2 <- reactive(data[data$x == input$z, ]) 

    output$plot <- renderPlot({ 
    newData <- data2() 
    plot(newData$x, newData$y) 
    }) 

    output$table <- renderTable({ 
    newData <- data2() 
    summary(newData$x) 
    }) 
}) 

आप पहले से ही नहीं है, तो जरूरत है मैं http://rstudio.github.io/shiny/tutorial/#welcome के माध्यम से पढ़ने की सलाह देते। प्रतिक्रियाशीलता पर पृष्ठ इस सवाल को काफी अच्छी तरह से संबोधित करता है।

+0

मदद के लिए धन्यवाद, मैं चमकदार के लिए बहुत नया हूं (यह मेरा दूसरा दिन इसके साथ काम कर रहा है)। आपका समाधान काम करता है, लेकिन जब मैं अपने सबसेट दिनचर्या के अंदर 'ifelse() 'को इन्सेट नहीं करता, जो वास्तव में ऐसा कुछ है:' data2 <- प्रतिक्रियाशील (ifelse (इनपुट $ z ==' ', डेटा, डेटा [डेटा $ x == इनपुट $ z,])) '। जब मैं ऐसा करता हूं, तो मुझे निम्न त्रुटि मिलती है: 'plot.window में त्रुटि (xlim, ylim, log = log, ...): सीमित 'xlim' मानों की आवश्यकता है। –

+0

बीटीडब्लू, मैं आरस्टूडियो ट्यूटोरियल (कम से कम मूल भाग) के साथ हूं और इसमें गहराई से खोदना चाहता हूं और समय के साथ पैकेज दस्तावेज का इरादा रखता हूं। –

+2

@wleoncio कि त्रुटि लगभग निश्चित रूप से है क्योंकि आप साजिश के लिए खाली 'data.frame' गुजर रहे हैं। तो मैं यह समझने के लिए कुछ डीबगिंग करने का सुझाव दूंगा कि क्या डेटा 2' आपके द्वारा अपेक्षित रिटर्न देता है। आप अपने साजिश आउटपुट फ़ंक्शन में चेक में भी जोड़ सकते हैं जैसे 'if (nrow (newData) == 0) वापसी() 'जो डेटा नहीं होने पर प्लॉट करने की कोशिश करने से रोक देगा। जबकि मैं एक चमकदार ऐप पर काम कर रहा हूं, मुझे बाद में टिप्पणी करने के लिए एक टेबल जोड़ना पसंद है, जो कि अलग-अलग डिबगिंग मानों को प्रिंट करेगा (यानी वर्तमान डेटा में पंक्तियों की संख्या, एक निश्चित चर के स्तर इत्यादि) –