【问题标题】:An absolute package path is set for the plotly package upon installation of another package that imports it在安装另一个导入它的包时,为 plotly 包设置绝对包路径
【发布时间】:2019-01-10 22:36:13
【问题描述】:

我正在编写一个 R 包“my_package”,它在说明文件中有这些导入:

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.5.1/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”时“闪亮”的位置无关紧要。只要“闪亮”位于 .libPath() 中的两条路径中的任何一条中,“my_package”就会按预期工作。

所以对于“plotly”来说,它的路径是在安装时绝对设置的。

【问题讨论】:

  • 这里的实际问题是什么? “如何在不破坏东西的情况下手动移动包裹?”?
  • @Marius 好吧,我的经理认为这是一个错误。他认为只要“plotly”位于 .libPaths() 中的任何路径中,那么无论何时安装“my_package”,它都应该始终有效。
  • 您是否尝试过将 plotly 安装到不同的 libPath (install.packages(..., lib)) 而不是手动移动它?
  • @RomanLuštrik 我试过你的建议,但没用,这是我的问题stackoverflow.com/questions/59752370/…

标签: r r-plotly


【解决方案1】:

我在上传到shinyapps.io 时遇到了类似的问题。我正在缓存绘图以改善默认情况下最初显示的绘图的加载时间。它在我的本地机器上运行良好,但在shinyapps.io 上失败了,大概是因为你提到的原因。该软件包被加载到其服务器上的不同位置。有一个 hacky 解决方法。在 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()生成的图。

【讨论】:

猜你喜欢
  • 2018-01-22
  • 1970-01-01
  • 2014-07-05
  • 2016-03-31
  • 2018-06-05
  • 2016-08-23
  • 1970-01-01
  • 2016-04-07
  • 2010-09-25
相关资源
最近更新 更多