r-在安装导入它的另一个程序包时,为plotly程序包设置一个绝对程序包路径



我正在编写一个R包"my_package",它在DESCRIPTION文件上有这些导入:

Imports: jsonlite,
tibble,
shiny,
ggplot2,
plotly (>= 4.5.6.9000),
dplyr

这是我的.libPaths():

[1] "C:/Users/some_user/Documents/R/win-library/3.5" "C:/rhome/r-3.5.1/library" 

问题是:

当我安装"my_package"时,"plotly"包位于:

"C:/rhome/r-3.5.1/library"

如果"阴谋"方案仍然存在,一切都会很好。但是,如果我将"plotly"包移动到.libPaths()上的另一个路径:

"C:/Users/some_user/Documents/R/win-library/3.5"

然后尝试从"my_package"中调用一个使用"plotly"中函数的函数,然后这是错误消息:

ERROR: Couldn't normalize path in `addResourcePath`, with arguments: `prefix` = 'plotly-binding-4.8.0'; `directoryPath` = 'C:/rhome/r-3.5.1/library/plotly/htmlwidgets'

这是我的实验:

  1. 我尝试了相反的方法,将"plotly"软件包最初定位在"C:\Users/some_user/Documents/R/win-library/3.5"中,然后安装"my_package"。就像以前一样,直到我将"plotly"包移到"C:\rhome/r-3.51/library"中。错误消息被反转:

    错误:无法规范化addResourcePath中的路径,参数为:prefix="plotly-binding-4.8.0";directoryPath="C:\Users/some_user/Documents/R/win-library/3.5/plotly/htmlwidgets">

  2. 我在"my_package"导入的另一个包中尝试了同样的方法,它是"闪亮的"。这里没有问题。安装"my_package"时"shine"位于何处并不重要。只要"shine"在.libPath()中的两个路径中的任何一个路径中,"my_package"就可以正常工作。

因此,对于"plotly",其路径在安装时绝对设置。

我在上传到shinyapps.io时遇到了类似的问题。我缓存绘图是为了改善默认情况下最初显示的绘图的加载时间。它在我的本地机器上运行得很好,但后来在shinyapps.io上失败了,可能是因为你提到的原因。程序包加载在其服务器上的其他位置。有一种巧妙的变通方法。在R中生成绘图后,可以手动设置相关性。在shinyapps.io上,这些是绝对有效的路径。您可以为您的用例编辑它们。

plotObject$dependencies[[1]]$src$file = "/opt/R/3.3.2/lib/R/library/plotly/htmlwidgets/lib/typedarray"
plotObject$dependencies[[2]]$src$file = "/opt/R/3.3.2/lib/R/library/crosstalk/lib/jquery"
plotObject$dependencies[[3]]$src$file = "/opt/R/3.3.2/lib/R/library/crosstalk/www"
plotObject$dependencies[[4]]$src$file = "/opt/R/3.3.2/lib/R/library/plotly/htmlwidgets/lib/plotlyjs"
plotObject$dependencies[[5]]$src$file = "/opt/R/3.3.2/lib/R/library/plotly/htmlwidgets/lib/plotlyjs"

这里的plotObject是由plotly()生成的图。

相关内容

最新更新