微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何强制 saveWidget 在 RStudio 之外创建单个文件?

如何解决如何强制 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?