2014-07-06 31 views
9

में इनपुट डेटासेट से निपटने के लिए मैं आर-शाइन के लिए नया हूं और मेरा प्रश्न बहुत आसान हो सकता है। सोचने और खोज के घंटों के बाद, मैं इस मुद्दे को हल नहीं कर सका। यहां समस्या है:आर चमकदार

1) मेरा ऐप उपयोगकर्ता को अपना डेटासेट अपलोड करने के लिए कहता है।

2) फिर सर्वर फ़ाइल में, मैंने डेटासेट पढ़ा और मैंने कुछ विश्लेषण किए और मैं परिणामों को उपयोगकर्ता इंटरफ़ेस में वापस रिपोर्ट करता हूं।

3) मेरे उपयोगकर्ता इंटरफ़ेस में 4 अलग-अलग आउट हैं।

4) मैंने प्रत्येक आउटपुट के "प्रस्तुत" फ़ंक्शन में डेटासेट पढ़ा। ISSUE: ऐसा करके, डेटा को स्थानीय रूप से प्रत्येक फ़ंक्शन के दायरे में परिभाषित किया जाता है जिसका अर्थ है कि मुझे प्रत्येक आउटपुट के लिए इसे फिर से पढ़ने की आवश्यकता है।

5) यह बहुत ही कुशल है, क्या कोई विकल्प है? प्रतिक्रियाशील का उपयोग कर?

6) नीचे एक नमूना दिखाते हुए कि कैसे मैं अपने server.R लिखा कोड है:

shinyServer(function(input, output) { 

    # Interactive UI's: 
    # %Completion 

    output$myPlot1 <- renderPlot({ 
    inFile <- input$file 

     if (is.null(inFile)) return(NULL) 
     data <- read.csv(inFile$datapath, header = TRUE) 

     # I use the data and generate a plot here 

    }) 

    output$myPlot2 <- renderPlot({ 
    inFile <- input$file 

     if (is.null(inFile)) return(NULL) 
     data <- read.csv(inFile$datapath, header = TRUE) 

     # I use the data and generate a plot here 

    }) 

}) 

कैसे मैं सिर्फ इनपुट डेटा एक बार प्राप्त कर सकते हैं और बस अपना उत्पादन कार्यों में डेटा का उपयोग करें?

धन्यवाद बहुत बहुत,

उत्तर

7

आप एक reactive समारोह में फ़ाइल से डेटा कॉल कर सकते हैं। यह तो myData() अन्य reactive कार्यों में के रूप में उदाहरण के लिए पहुँचा जा सकता है:

library(shiny) 
write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv') 
runApp(list(ui = fluidPage(
    titlePanel("Uploading Files"), 
    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')) 
    ), 
    mainPanel(
     tableOutput('contents') 
    ) 
) 
) 
, server = function(input, output, session){ 
    myData <- reactive({ 
    inFile <- input$file1 
    if (is.null(inFile)) return(NULL) 
    data <- read.csv(inFile$datapath, header = TRUE) 
    data 
    }) 
    output$contents <- renderTable({ 
    myData() 
    }) 

} 
) 
) 

enter image description here

+1

हाय @jdharrison, बहुत आपके उत्तर के लिए बहुत धन्यवाद। मैंने वास्तव में कोशिश की लेकिन मुझे त्रुटि मिली कि "ऑब्जेक्ट ऑफ टाइप 'क्लोजर' सबसेट योग्य नहीं है"। – Sam

+0

कृपया ध्यान दें कि बाद में मैं अपने प्रस्तुत कार्यों में "myData" का संदर्भ देता हूं और $ ऑपरेटर के माध्यम से डेटा के कुछ कॉलम का उपयोग करूंगा। जब भी मैं myData $ col1 जैसे कॉलम का उपयोग करता हूं, तो मुझे उपरोक्त त्रुटि मिलती है। – Sam

+1

मेरे लिए ठीक काम करता है। कॉलम को 'myData() $ col1' के रूप में एक्सेस किया जाएगा, हालांकि आप आमतौर पर पहले अपने प्रतिक्रियाशील फ़ंक्शन में' mydata <- myData() 'जैसे कुछ करते हैं। – jdharrison

संबंधित मुद्दे