在knitr文档中嵌入Shiny app

时间:2014-10-14 01:01:37

标签: r shiny

我有一个闪亮的应用程序,它有一个ui.R,server.R和global.R。 app目录(name = dash)包含文件夹' data'数据集所在的位置。此外,此app文件夹位于项目的工作目录中。 在global.R中,我将数据读作:

dash <- read.table("data/ntraj1acc.txt", sep=",", header=T)

此应用程序正常。现在,我正在尝试将其嵌入到ioslides演示文稿中,否则它将运行良好。 rmarkdown网站上External Applications部分的示例在我的演示文稿中也很完美。但当我将system.file中的路径替换为我的应用时,我收到错误:

No Shiny application exists at the path ""

以下是我如何替换路径:

shinyAppDir(
  system.file("dash", package="shiny"),
  options=list(
    width="100%", height=700
  )
)

错误发生后,我尝试了以下内容:

shinyAppDir(
  "C:/Users/durraniu/Documents/Trajectory-one/dash",
  options=list(
    width="100%", height=700
  )
)

但后来我遇到了一个新错误:

object 'dash' not found

这意味着它没有解析global.R。

如何解决此问题?

3 个答案:

答案 0 :(得分:3)

system.file("dash", package="shiny")绝对无法正常工作,正在寻找名为&#34; dash&#34;的文件夹。在闪亮的包装本身内部,显然不存在。

另外,我们在RMarkdown中有一个限制,它没有为嵌入式Shiny应用程序调用global.R,遗憾的是这个事实似乎没有进入文档。 https://github.com/rstudio/rmarkdown/issues/211

最后,与普通的Shiny应用程序不同,在RMarkdown文档的嵌入式Shiny应用程序中,您无法假设来自server.R的相对路径将正确解析;这是因为许多应用程序可以在单个会话中运行,包括RMarkdown文档本身(也是一个Shiny应用程序),所以没有办法让所有这些应用程序都满意。

目前,我建议您直接在RMarkdown文档中加载数据,并从子应用程序中假设数据已经加载 - 我相信这有效,如果我弄错了,请纠正我。

答案 1 :(得分:3)

我成功地将一个应用程序嵌入到交互式闪亮文档中,其中包含以下rmarkdown块:

```
shinyAppDir("D:/Documents/OneDrive/Notes/R-Explore/shiny/01-ages/",
  options=list(
    width="100%", height=550
  )
) 
```

所有3个文件:ui.R,server.R和test.Rmd处于上述绝对路径

答案 2 :(得分:1)

2018年更新此问题:

感谢bookdown软件包,knitr现在可以使用

包含HTML小部件,Shiny应用程序和任意网站
knitr::included_url()
knitr::include_app()

查看书籍簿中的文档以获取更多示例: https://bookdown.org/yihui/bookdown/web-pages-and-shiny-apps.html