knitr

2012-06-14 21 views
5

के साथ आउटपुट में हेरफेर करना एकीकृत करना मैं सोच रहा था कि manipulate पैकेज या gWidgetsManipulate पैकेज को एकीकृत करने का कोई तरीका है ताकि उनके आउटपुट एचटीएमएल/मार्कडाउन आउटपुट फ़ाइल में देखने योग्य/कुशल हो सकें, जैसा कि मुझे लगता है कि यह पुनरुत्पादित इंटरैक्टिव शोध रिपोर्ट विकसित करते समय बेहद उपयोगी होगा। मुझे पता है कि googleVis में कुछ कार्यक्षमता है जो इसे knitr के साथ एकीकृत करने की अनुमति देती है ताकि आउटपुट एचटीएमएल फाइल में परिणाम = 'asis' जैसे विकल्पों का उपयोग करके जा सके लेकिन उदाहरण के लिए स्लाइडर का उपयोग करते समय googleVis वर्तमान में इसकी क्षमताओं में काफी प्रतिबंधित है।knitr

यदि मैनिपुलेट या gWidgetsManipulate के पैकेज आउटपुट को अभी तक एकीकृत नहीं किया गया है, तो क्या समय के लिए एक समाधान का सुझाव देना संभव होगा जिससे इसे HTML फ़ाइल में देखा जा सके?

यानी एचटीएमएल में knitr-ing चलाने से पहले मेरी आरएमडी फ़ाइल में मेरा वर्तमान कोड नीचे जैसा दिखता है ... लेकिन मुझे निम्न त्रुटियां मिलती हैं।

```{r} 
library(manipulate) 
manipulate(plot(1:x), x = slider(5, 10)) 
``` 
उत्पादन के साथ

library(manipulate) 
## Error: there is no package called 'manipulate' 
manipulate(plot(1:x), x = slider(5, 10)) 
## Error: could not find function "manipulate" 

तो पैकेज gWidgetsManipulate बजाय ...

```{r} 
library(gWidgetsManipulate) 
manipulate(plot(1:x), x = slider(5, 10)) 
``` 

आप त्रुटि मिलती है ...

library("gWidgetsManipulate") 
## Loading required package: gWidgets 
manipulate(plot(1:x), x = slider(5, 10)) 
## Error: unable to find an inherited method for function ".gwindow", for signature "NULL" 

मैं करने की कोशिश की कोशिश कर रहा हमारे द्वारा इस त्रुटि को ठीक करने के लिए guiToolkit निर्दिष्ट करें एक,

options(guiToolkit="WWW") 

लेकिन कोई लाभ नहीं हुआ जैसी चीजों ing ...

किसी भी मदद की बहुत सराहना की जाएगी अग्रिम धन्यवाद

+2

मुझे लगता है कि '' manipulate' googleVis' साथ काफी अलग है; उत्तरार्द्ध HTML/जावास्क्रिप्ट कोड लिख सकता है जो बातचीत की अनुमति देता है, लेकिन मुझे संदेह है कि पूर्व भी करता है। –

+0

क्या gwidgets या gwidgetsManipulate नहीं है या किसी भी gwidgetsXXX संकुल कुछ HTML/जावास्क्रिप्ट लिखने में मदद करते हैं? –

+0

मुझे 'gwidgetsManipulate' के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे यकीन है कि' gwidgets' HTML स्ट्रिंग के रूप में HTML/JS नहीं लिखता है; 'gWidgetsWWW' या' gWidgetsWWW2' वेब पेज बना सकता है, लेकिन आपको वास्तव में जो चाहिए वह HTML/JS स्निपेट है जो HTML दस्तावेज़ में _embedded_ हो सकता है। –

उत्तर

3

आप पूरी तरह gwidgets उपयोग करने की आवश्यकता नहीं है, तो मेरे पास है रूक और googleVis के साथ समाधान जो आप चाहते हैं: HTML में एक इंटरैक्टिव चार्ट प्रदर्शित करना।

स्लाइडर के लिए स्क्रिप्ट: इसमें वर्तमान में चुने गए मान को प्रदर्शित करने के लिए थोड़ा जावास्क्रिप्ट फ़ंक्शन शामिल है। यह प्रत्येक परिवर्तन पर फॉर्म भी प्रस्तुत करता है। आप आसानी से न्यूनतम/अधिकतम/... मूल्यों को आसानी से बदल सकते हैं।

slider_script <- ' 
    <input type="range" min="5" max="10" name="plot_max" value="%s" step="1" onchange="document.form1.submit(); showValue(this.value);" /> 
    <span id="range">%s</span> 
    <script type="text/javascript"> 
    function showValue(newValue) 
{ 
    document.getElementById("range").innerHTML=newValue; 
    } 
</script> 
' 

हम वेब पेज का कोड बनाते हैं। संरचना रुक के लिए विशिष्ट है: एचटीएमएल कोड res $ लिख() के अंदर लिखा गया है।

### this script builds the webpage 
    webreport_app <- function(
    ){ 
     newapp = function(env) { 
     req = Rook::Request$new(env) 
     res = Rook::Response$new() 
     # initialise variables for first execution 
     if (is.null(req$POST())){ 
      plot_max <- 5 
     } else{ 
      plot_max <- as.numeric(req$POST()[["plot_max"]]) 
     } 
     res$write('<body style="font-family:Arial">') 
     res$write("<H3>My App</H3>") 
     res$write('<form name = "form1" method="POST">\n') 
     res$write('<br> Number of dots: \n') 
     res$write(sprintf(slider_script, plot_max, plot_max)) 
     res$write('<br><input type="submit" name="Go!">\n</form>\n') 
     if (!is.null(req$POST())) {  
      # generate the plot 
      library(googleVis) 
      data_for_plot <- data.frame(x_var = 1:plot_max, y_var = 1:plot_max) 
      Scatter1 <- gvisScatterChart(data_for_plot) 
      # extract chart script 
      chart_script <- capture.output(print(Scatter1, 'chart')) 
      # write to html 
      res$write(paste(chart_script, collapse="\n")) 
      res$write("<br><br></body></html>") 
     } 
     res$finish() 
     } 
     return(newapp) 
    } 

और अंत में सेटअप का शुभारंभ और रूक के माध्यम से एचटीएमएल सर्वर का शुभारंभ:

library(Rook) 

# launch the web app 
if (exists("report_server")){ 
    report_server$remove(app, all = TRUE) 
    report_server$stop() 
    rm(report_server) 
} 
report_server = Rhttpd$new() 
report_server$add(app = webreport_app(), name = "My_app") 
report_server$start() 
report_server$browse("My_app") 
report_server$browse() 
+0

ओह! यह अब तक बहुत अच्छा लग रहा है ... धन्यवाद!क्षमा करें अगर यह एक मूल प्रश्न है लेकिन कंसोल में कोड चलाने से ब्राउज़र आ जाता है जो कि मज़ेदार है, जो कि बहुत अच्छा है, लेकिन क्या यह संभव है कि इसे आरएमडी फ़ाइल में डालने की ज़रूरत है, ताकि knit2html() इसे एकीकृत करते समय यह एचटीएमएल आउटपुट उदाहरण में मैं उम्मीद करेंगे RMD फाइल करने के लिए तरह दिखता है: 'आर कोड से पहले यादृच्छिक पाठ ' '' {r} 'देखने पर manipulable gvis ' '' ' यादृच्छिक टिप्पणियों के बाद वस्तु एकीकृत किश्ती समारोह उत्पन्न करने के लिए कोड कोड और एकीकृत manipulable जीविस वस्तु। –

+0

सबमिट बटन को हटाने का कोई तरीका भी है ताकि चर बदलते ही पृष्ठ स्वचालित रूप से अपडेट हो जाए? शायद कुछ प्रकार की स्लाइडर कार्यक्षमता जो रीयलटाइम में अपडेट होती है? या शायद एक 1 सेकंड रीफ्रेश दर में बनाया गया है? –

+0

मुझे एक स्थिर वेब पेज के साथ एक संस्करण होना पसंद है (जिसे तब knitr के साथ उत्पन्न किया जा सकता है), लेकिन googleVis पैकेज Google चार्ट नियंत्रणों का समर्थन नहीं करता है ... – nassimhddd