我想知道是否有一种方法可以集成manipulate
包或gWidgetsManipulate
包,以便它们的输出可以在html / markdown输出文件中查看/操作,因为我认为这在开发可重复的交互式研究报告时非常有用。我知道googleVis有一些功能允许它与knitr集成,因此输出通过使用像results ='asis'这样的选项进入html文件,但googleVis目前在使用滑块时的功能非常严格。
如果还没有完全集成了manipulate或gWidgetsManipulate的软件包输出,那么是否可以暂时建议一个允许在html文件中查看的解决方法?
即。我在运行knitr-ing到html之前在我的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")
但无济于事......
任何帮助都将非常感谢,提前感谢
答案 0 :(得分: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>
'
我们构建网页代码。这种结构对于车来说很典型: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()