如何解决如何强制 saveWidget 在 RStudio 之外创建单个文件?
在 RStudio 中,我可以将我的 html 小部件保存到单个文件中:
htmlwidgets::saveWidget(x,"filename.html",selfcontained=TRUE)
当通过 Windows 任务计划程序(它调用 Rscript.exe)运行带有上述行的 R 脚本时,这将生成一个多文件 html(即具有相关参考内容目录的 html 文件)。使用 RGui 也无法生成单文件 html。
这些是来自重复问题的 Rgui 实现的行:
> library(leaflet)
> library(htmlwidgets)
> map <- leaflet::leaflet() %>% addTiles() %>% setView(lng=172.4,lat=-41,zoom=6)
> saveWidget(map,file="deleteme.html",selfcontained=TRUE)
Error in saveWidget(map,file = "deleteme.html",selfcontained = TRUE) :
Saving a widget with selfcontained = TRUE requires pandoc. For details see:
https://github.com/rstudio/rmarkdown/blob/master/PANDOC.md
> list.files(getwd(),full.names=FALSE,recursive=TRUE)
[1] "deleteme.html"
[2] "deleteme_files/htmlwidgets-1.5.3/htmlwidgets.js"
[3] "deleteme_files/jquery-1.12.4/jquery.min.js"
[4] "deleteme_files/leaflet-1.3.1/images/layers-2x.png"
[5] "deleteme_files/leaflet-1.3.1/images/layers.png"
[6] "deleteme_files/leaflet-1.3.1/images/marker-icon-2x.png"
[7] "deleteme_files/leaflet-1.3.1/images/marker-icon.png"
[8] "deleteme_files/leaflet-1.3.1/images/marker-shadow.png"
[9] "deleteme_files/leaflet-1.3.1/leaflet.css"
[10] "deleteme_files/leaflet-1.3.1/leaflet.js"
[11] "deleteme_files/leaflet-binding-2.0.4.1/leaflet.js"
[12] "deleteme_files/leafletfix-1.0.0/leafletfix.css"
[13] "deleteme_files/proj4-2.6.2/proj4.min.js"
[14] "deleteme_files/Proj4Leaflet-1.0.1/proj4leaflet.js"
[15] "deleteme_files/rstudio_leaflet-1.3.1/images/1px.png"
[16] "deleteme_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css"
原因的一个线索是运行 saveWidget 函数后返回的错误消息(尽管提供的 Web 链接不再有效)。错误消息指出 htmlwidgets::saveWidget 函数需要 pandoc.exe 应用程序才能创建单文件 html。如果它不可用,则它会创建一个多文件 html。
但我已经安装了 pandoc.exe,因为它与我一直使用的 RStudio 捆绑包一起提供。
事实证明,htmlwidgets::saveWidget 使用 rmarkdown::find_pandoc 函数检查 pandoc.exe 的可用性。这会检查保存在“RSTUdio_PANDOC”和“PATH”环境变量和 ~/opt/pandoc/ 目录中的路径中是否存在 pandoc.exe。
使用 RStudio 时,会自动设置“RSTUdio_PANDOC”环境变量。当我通过任务计划程序运行脚本时没有设置它,在这种情况下我使用 Rscript.exe。安装 pandoc.exe 时(它包含在 RStudio 包中)未设置 PATH 环境变量,因此也无法以这种方式找到它。
那么当我不使用 RStudio 时,如何让 saveWidget 保存到单个 html 文件中?
解决方法
一种解决方案是显式设置 RSTUDIO_PANDOC 环境变量。 或者 pandoc.exe 可以添加到 PATH 环境变量中。 以上任何一个都可以添加到 .Renviron 文件中。 以下是第一种方法的示例:
> library(leaflet)
> library(htmlwidgets)
> map <- leaflet::leaflet() %>% addTiles() %>% setView(lng=172.4,lat=-41,zoom=6)
> Sys.setenv(RSTUDIO_PANDOC = "C:/Program Files/RStudio/bin/pandoc")
> saveWidget(map,file="deleteme.html",selfcontained=TRUE)
> list.files(getwd(),full.names=FALSE,recursive=TRUE)
[1] "deleteme.html"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。