5

manipulateパッケージまたはパッケージを統合して、それらの出力をhtml / markdown出力ファイルで表示/操作できるようにする方法があるかどうか疑問に思いましgWidgetsManipulateた。これは、再現可能なインタラクティブな調査レポートを作成するときに非常に役立つと思います。 。googleVisにはknitrと統合できる機能がいくつかあるので、results ='asis'などのオプションを使用して出力をhtmlファイルに入れることができますが、たとえばスライダーを使用する場合、現在googleVisの機能はかなり制限されています。

manageまたはgWidgetsManipulateのパッケージ出力がまだ完全に統合されていない場合、htmlファイルで表示できるようにする回避策を当面提案することはできますか?

つまり、HTMLへのknitr-ingを実行する前のRmdファイルの現在のコードは次のようになります...しかし、次のエラーが発生します。

```{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")

しかし、役に立たない...

事前に感謝します、どんな助けでも大歓迎です

4

1 に答える 1

3

gwidgetsを絶対に使用する必要がない場合は、RookとgoogleVisを使用して、必要な処理を実行するソリューションがあります。HTMLでインタラクティブなグラフを表示することです。

スライダーのスクリプト:現在選択されている値を表示するための小さなjavascript関数が含まれています。また、変更のたびにフォームを送信します。ここで最小/最大/...の値を簡単に変更できます。

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

Webページのコードを作成します。構造はrookの典型的なものです。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)
    }

そして最後にセットアップを起動し、Rook経由で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()
于 2012-07-08T16:48:08.743 に答える