दिलचस्प पोस्ट
क्यों {…} अंत में {…} अच्छा प्रयास कर रहा है; {…} को पकड़ {} बुरा की कोशिश करो? "उत्पन्न से" बयान को पायथन 2.7 कोड में परिवर्तित करना Google Play ऐप साइनिंग को कैसे सक्षम करें ओरेकल डाटाबेस में सी # से कनेक्ट करने के लिए आवश्यक न्यूनतम ग्राहक पदचिह्न क्या है? डेटाबेस mysql में छवियों को सहेजना Apache HttpClient 4 के साथ प्रीपेडिव बेसिक प्रमाणीकरण थ्रॉटलिंग विधि एन सेकंड में एम अनुरोधों को कॉल करता है सी में अनुमति नहीं, बल्कि सी + + में पुनः परिभाषा की अनुमति है? Android / Eclipse PANIC: खोला नहीं जा सका कलेक्टरों। में मैप के लिए जावा 8 NullPointerException सुंदर सूप उपयोगकर्ता चेतावनी से छुटकारा पाने के लिए कैसे? हल करने में विफल: com.android.support:cardview-v7:26.0.0 एंड्रॉइड कैसे jQuery 'स्वाधीन मान्यकरण' का उपयोग करते समय एक 'submitHandler' फ़ंक्शन जोड़ने के लिए? सी ++ 0x थ्रेड रुकावट एचडीएफएस में डेटा ब्लॉक आकार, क्यों 64 एमबी?

एक चमकदार ऐप में बने भूखंड सहेजें

मैं यह समझाने की कोशिश कर रहा हूं कि कैसे डाउनलोडबटन का उपयोग करने के लिए साजिश को चमकदार रखने के लिए। पैकेज में दिए गए उदाहरण डाउनलोड बटन / डाउनलोडहैंडलर को .csv को बचाने के लिए दर्शाता है मैं उस पर आधारित एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाने जा रहा हूं।

ui.R

 shinyUI(pageWithSidebar( headerPanel('Downloading Data'), sidebarPanel( selectInput("dataset", "Choose a dataset:", choices = c("rock", "pressure", "cars")), downloadButton('downloadData', 'Download Data'), downloadButton('downloadPlot', 'Download Plot') ), mainPanel( plotOutput('plot') ) )) 

server.R लिए। server.R

 library(ggplot2) shinyServer(function(input, output) { datasetInput <- reactive({ switch(input$dataset, "rock" = rock, "pressure" = pressure, "cars" = cars) }) plotInput <- reactive({ df <- datasetInput() p <-ggplot(df, aes_string(x=names(df)[1], y=names(df)[2])) + geom_point() }) output$plot <- renderPlot({ print(plotInput()) }) output$downloadData <- downloadHandler( filename = function() { paste(input$dataset, '.csv', sep='') }, content = function(file) { write.csv(datatasetInput(), file) } ) output$downloadPlot <- downloadHandler( filename = function() { paste(input$dataset, '.png', sep='') }, content = function(file) { ggsave(file,plotInput()) } ) }) 

यदि आप इस प्रश्न का उत्तर दे रहे हैं, तो आप शायद इस से परिचित हैं, लेकिन यह काम करने के लिए, उपर्युक्त को अलग-अलग लिपियों ( ui.R और server.R को कार्य निर्देशिका में एक फ़ोल्डर ( foo ) में server.R । चमकदार चलाने के लिए ऐप, runApp("foo")

ggsave का उपयोग करते ggsave मुझे एक त्रुटि संदेश मिलता है जो इंगित करता है कि ggsave filename फ़ंक्शन का उपयोग नहीं कर सकता (मुझे लगता है)। अगर मैं मानक ग्राफिक्स डिवाइस (नीचे की तरह) का उपयोग करता हूं, तो Download Plot किसी त्रुटि के बिना कार्य करता है, लेकिन यह ग्राफिक नहीं लिखता है

डाउनलोड पाने के लिए कोई सुझाव प्लान लिखने के लिए काम करने वाले हैंडलर की सराहना की जाएगी।

Solutions Collecting From Web of "एक चमकदार ऐप में बने भूखंड सहेजें"

निश्चित नहीं कि यह सवाल अभी भी सक्रिय है, लेकिन यह पहली बार है, जो "चमकदार ऐप में बचत के भूखंडों" की तलाश करते हुए आया था, इसलिए मैं जल्दी से जोड़ना चाहता था कि कैसे जीजावे को मूल प्रश्न की तर्ज पर डाउनलोडहैंडलर के साथ काम करने के लिए मिला।

जीजावे के बजाए सीधा आउटपुट का उपयोग करके जुबबा द्वारा सुझाए गए वैकल्पिक रणनीतियों और एलेक्जवान ने खुद को अच्छा काम करने के लिए सुझाव दिया है, यह केवल उन लोगों के लिए है जो डाउनलोडशेडर में जीजावे का उपयोग करना चाहते हैं)।

एलेक्ज़वेन द्वारा रिपोर्ट की गई समस्या का कारण ggsave सही ग्राफिक्स डिवाइस के लिए फ़ाइल एक्सटेंशन से मेल खाने की कोशिश कर रहा है। अस्थायी फ़ाइल, हालांकि, एक एक्सटेंशन नहीं है, इसलिए मिलान विफल रहता है। यह विशेष रूप से डिवाइस को ggsave फ़ंक्शन कॉल में सेट किया जा सकता है, जैसे कि मूल कोड उदाहरण में (एक पीएनजी के लिए):

 output$downloadPlot <- downloadHandler( filename = function() { paste(input$dataset, '.png', sep='') }, content = function(file) { device <- function(..., width, height) grDevices::png(..., width = width, height = height, res = 300, units = "in") ggsave(file, plot = plotInput(), device = device) } ) 

यह कॉल मूल रूप से device फ़ंक्शन को png लिए लेता है जो आंतरिक रूप से असाइन करता है (आप jpg , pdf , आदि के लिए सिंटैक्स देखने के लिए ggsave फ़ंक्शन कोड देख सकते हैं)। शायद, आदर्श रूप में, कोई फ़ाइल एक्सटेंशन निर्दिष्ट कर सकता है (यदि फ़ाइल नाम से अलग – जैसा कि अस्थायी फ़ाइल के लिए मामला है) ggsave पैरामीटर के रूप में, लेकिन यह विकल्प वर्तमान में ggsave में उपलब्ध नहीं है।


कम से कम आत्मनिहित कार्य उदाहरण:

 library(shiny) library(ggplot2) runApp(list( ui = fluidPage(downloadButton('foo')), server = function(input, output) { plotInput = function() { qplot(speed, dist, data = cars) } output$foo = downloadHandler( filename = 'test.png', content = function(file) { device <- function(..., width, height) { grDevices::png(..., width = width, height = height, res = 300, units = "in") } ggsave(file, plot = plotInput(), device = device) }) } )) sessionInfo() # R version 3.1.1 (2014-07-10) # Platform: x86_64-pc-linux-gnu (64-bit) # # locale: # [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C # [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 # [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 # [7] LC_PAPER=en_US.UTF-8 LC_NAME=C # [9] LC_ADDRESS=C LC_TELEPHONE=C # [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C # # attached base packages: # [1] stats graphics grDevices utils datasets methods base # # other attached packages: # [1] ggplot2_1.0.0 shiny_0.10.1 # # loaded via a namespace (and not attached): # [1] bitops_1.0-6 caTools_1.17 colorspace_1.2-4 digest_0.6.4 # [5] formatR_1.0 grid_3.1.1 gtable_0.1.2 htmltools_0.2.6 # [9] httpuv_1.3.0 labeling_0.2 MASS_7.3-34 munsell_0.4.2 # [13] plyr_1.8.1 proto_0.3-10 Rcpp_0.11.2 reshape2_1.4 # [17] RJSONIO_1.3-0 scales_0.2.4 stringr_0.6.2 tools_3.1.1 # [21] xtable_1.7-3 

अद्यतन करें

Ggplot2 संस्करण 2.0.0 के अनुसार, ggsave फ़ंक्शन, device पैरामीटर के लिए चरित्र इनपुट का समर्थन करता है, इसका मतलब है कि ggsave द्वारा बनाई गई अस्थायी फ़ाइल को अब एक प्रत्यक्ष कॉल के साथ ggsave को सहेजा जा सकता है कि निर्दिष्ट किया जाना चाहिए कि "pdf" (बजाय एक डिवाइस समारोह में गुजरने के बजाय) यह निम्न उदाहरणों को निम्नलिखित के लिए सरल करता है

 output$downloadPlot <- downloadHandler( filename = function() { paste(input$dataset, '.png', sep='') }, content = function(file) { ggsave(file, plot = plotInput(), device = "png") } ) 

यहां एक समाधान है जो चमकदार भूखंडों को बचाने के लिए जीजीएसवे का उपयोग करने की अनुमति देता है यह ggsave() को कॉल करने के लिए एक लॉजिकल चेकबॉक्स और पाठ इनपुट का उपयोग करता है ui.R अंदर sidebarPanel फ़ाइल में इसे जोड़ें sidebarPanel :

 textInput('filename', "Filename"), checkboxInput('savePlot', "Check to save") 

फिर इसे चालू output$plot server.R output$plot फ़ंक्शन के बजाय server.R में server.R फ़ाइल:

 output$plot <- reactivePlot(function() { name <- paste0(input$filename, ".png") if(input$savePlot) { ggsave(name, plotInput(), type="cairo-png") } else print(plotInput()) }) 

एक उपयोगकर्ता तब पाठ बॉक्स में इच्छित फ़ाइल नाम टाइप कर सकता है (एक्सटेंशन के बिना) और ऐप निर्देशिका में सहेजने के लिए चेकबॉक्स को टिक कर सकता है। बॉक्स को अनचेक करना फिर से भूखंड को फिर से प्रिंट करता है मुझे यकीन है कि ऐसा करने के कुछ अच्छे तरीके हैं, लेकिन कम से कम अब मैं जीजीएसएवी और कैरो का इस्तेमाल विंडोज़ में कर सकता हूँ बहुत अच्छे पीएनजी ग्राफिक्स के लिए

कृपया आपके पास कोई सुझाव जोड़ें

मैंने इसे ggsave साथ काम करने का प्रबंधन नहीं किया, लेकिन ggsave png() को एक मानक कॉल के साथ यह ठीक लगता है।

मैंने केवल आपके server.R का output$downloadPlot server.R भाग को बदल दिया है। server.R फ़ाइल:

  output$downloadPlot <- downloadHandler( filename = function() { paste(input$dataset, '.png', sep='') }, content = function(file) { png(file) print(plotInput()) dev.off() }) 

ध्यान दें कि मुझे चमकदार के 0.3 संस्करण के साथ कुछ समस्याएं थीं, लेकिन यह गिथूब से नवीनतम के साथ काम करता है:

 library(devtools) install_github("shiny","rstudio") 

यह पुराना है, लेकिन फिर भी शीर्ष हिट तब होता है जब कोई "आर चमकदार बचाओ जीजीप्लोट" को छोड़ देता है, इसलिए मैं एक और वैकल्पिक हल में योगदान दूंगा। बहुत सरल … जीजीएसएव को उसी फ़ंक्शन में कॉल करें जो आपके ग्राफ़ को प्रदर्शित करता है, जो ग्राफ को सर्वर पर फ़ाइल के रूप में सहेज देगा।

 output$plot <- renderPlot({ ggsave("plot.pdf", plotInput()) plotInput() }) 

उसके बाद, file.copy() उपयोग करें और मौजूदा फ़ाइल से "फ़ाइल" पैरामीटर में डेटा लिखने के लिए file.copy() का उपयोग करें

 output$dndPlot <- downloadHandler( filename = function() { "plot.pdf" }, content = function(file) { file.copy("plot.pdf", file, overwrite=TRUE) } ) 

मेरे लिये कार्य करता है।