2012-06-14 6 views
5

manipulateパッケージまたはgWidgetsManipulateパッケージを統合して、出力をhtml/markdown出力ファイルで表示/操作できるようにする方法があるのだろうかと思っていました。再現性のあるインタラクティブなリサーチレポートを作成する際に非常に役立ちます。 googleVisには、結果が 'asis'のようなオプションを使用して出力がhtmlファイルに入るように、knitrと統合できるいくつかの機能があることがわかっていますが、現在googleVisはスライダーを使用しているときにはかなり制限があります。knitrと出力を統合する

manipulateまたはgWidgetsManipulateのパッケージ出力がまだ統合されていない場合は、htmlファイルで表示できる回避策を提案することは可能でしょうか?

つまり、私の現在のコードは、私のRmdファイル内で、htmlにknitr-ingを実行する前に、以下のように表示されますが、次のエラーが表示されます。出力

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

```{r} 
library(manipulate) 
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" 

は、私が試してみました...あなたがエラーを取得...代わりに

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

をパッケージgWidgetsManipulateをしようこのエラーを修正するguiToolkitを指定する

+2

私はmanipulate'は 'googleVis'とはかなり異なっている'推測します。後者はインタラクションを可能にするHTML/Javascriptコードを書くことができますが、前者の場合も同様です。 –

+0

gWidgets、gWidgetsManipulate、またはgWidgetsXXXパッケージのいずれもHTML/JavaScriptを記述するのに役立ちませんか? –

+0

'gWidgetsManipulate'についてはよく分かりませんが、' gWidgets'はHTML/JSを文字列として書きません。 'gWidgetsWWW'や' gWidgetsWWW2'はWebページを作成するかもしれませんが、本当に必要なのはHTML文書に埋め込むことができるHTML/JSスニペットです。 –

答えて

3

あなたは絶対にgwidgetsを使用する必要がない場合は事前のおかげで、任意の助けをいただければ幸いです

...

options(guiToolkit="WWW") 

が、無駄に

のようなものをINGの、私が持っていますあなたが望むことを実行するRook​​とgoogleVisのソリューション:インタラクティブなチャートをhtmlで表示する

スライダー用のスクリプト:現在選択されている値を表示するための小さなJavaScript関数が含まれています。また、変更ごとにフォームを提出します。ここでmin/max/...の値を簡単に変更することができます。

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> 
' 

ウェブページのコードを作成します。構造はルークにとって典型的です:htmlコードはres $ write()の中に書かれています。

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

そして最後にセットアップを起動して、ルークを経由してHTMLサーバーを起動します。

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

ああ!これまでのところ非常に良いように見える...ありがとう!これは基本的な質問ですが、コンソールでコードを実行すると操作が可能なブラウザーが表示されますが、これはRmdファイルに格納する必要があることを正確に示すことができるため、knit2html()を実行すると、それは、HTML出力に例えば後 '' ' 'ランダムなコメントをオブジェクト操作可能gvisを表示するための統合ルーク関数を生成する 'ランダムなテキストRコードの前に ' '' {R} 'コード:私は、RMDファイルのようなものに見えることを期待しますコードと統合された操作可能なgvisオブジェクトです。 –

+0

また、変数が変更されるとすぐにページが自動的に更新されるように、送信ボタンを削除する方法はありますか?おそらくリアルタイムで更新する何らかのスライダー機能ですか?またはおそらく1秒のリフレッシュレートが組み込まれていますか? –

+0

私は静的なウェブページ(それはknitrで生成することができます)を持つバージョンが大好きですが、googleVisパッケージはGoogleチャートコントロールをサポートしていません... – nassimhddd

関連する問題