当使用散点图可视化数据时,我想将小部件编写为html文档,而无需npm install
每次都编写依赖项,前提是假定这些依赖项已经存在,以节省处理时间。这些小部件必须是独立的,以节省磁盘空间。
htmlwidgets::saveWidget
library(plotly)
t <- Sys.time()
p <- plot_ly(ggplot2::diamonds, y = ~price, color = ~cut, type = "box")
htmlwidgets::saveWidget(as_widget(p), "test.html", selfcontained = F, libdir = NULL)
print(Sys.time() - t)
在我的计算机上。
这仅会在依赖时产生约6 mb的数据(串扰1.0.0,htmlwidgets-1.2,jquery-1.11.3,plotly-binding-4.7.1.9000,plotly-htmlwidgets-css-1.38.3,plotly- main-1.38.3,typedarray-0.1)
Time difference of 4.303076 secs
写入依赖关系,尽管这些文件已经存在。可以预防吗?
答案 0 :(得分:0)
好问题。我试图在代码中的注释中内联回答。 htmlwidgets
依赖项来自两个来源:小部件列表中的htmlwidgets::getDependency()
和dependencies
元素。更改src
href dependencies to
文件instead of
中的means these dependencies will not get copied. However, the dependencies from
元素htmlwidgets :: getDependency()are harder to overwrite, but in the case will only copy
htmlwidgets.js and
plotly-binding.js `,与其他四个相比,它很小。
library(plotly)
p <- plot_ly(ggplot2::diamonds, y = ~price, color = ~cut, type = "box")
# let's inspect our p htmlwidget list for clues
p$dependencies
# if the src argument for htmltools::htmlDependency
# is file then the file will be copied
# but if it is href then the file will not be copied
# start by making a copy of your htmlwidget
# this is not necessary but we'll do to demonstrate the difference
p2 <- p
p2$dependencies <- lapply(
p$dependencies,
function(dep) {
# I use "" below but guessing that is not really the location
dep$src$href = "" # directory of your already saved dependency
dep$src$file = NULL
return(dep)
}
)
# note this will still copy htmlwidgets and plotly-binding
# requires a much bigger hack to htmlwidgets::getDependency() to change
t <- Sys.time()
htmlwidgets::saveWidget(as_widget(p), "test.html", selfcontained = F, libdir = NULL)
print(Sys.time() - t)
t <- Sys.time()
htmlwidgets::saveWidget(as_widget(p2), "test.html", selfcontained = F, libdir = NULL)
print(Sys.time() - t)