在安装另一个导入它的软件包时,为plotly软件包设置了一个绝对的软件包路径

时间:2019-01-10 22:36:13

标签: r r-plotly

我正在编写一个R包“ my_package”,该包在DESCRIPTION文件中具有这些导入:

web.config

这是我的.libPaths():

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

问题出在这里

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

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

如果“ plotly”程序包保留在那里,一切都将正常工作。但是,如果我将“ plotly”包移至.libPaths()上的其他路径:

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

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

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

这是我的实验:

  1. 我尝试了相反的操作,并将“ plotly”程序包最初放置在“ C:/Users/some_user/Documents/R/win-library/3.5”中,然后安装了“ my_package”。就像在它起作用之前,直到我将“ plotly”包移至“ C:/rhome/r-3.5.1/library”。错误消息是相反的:

    错误:无法使用参数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' ='plotly-binding-4.8.0'来规范addResourcePath中的路径。 prefix ='C:/Users/some_user/Documents/R/win-library/3.5/plotly/htmlwidgets'

  2. 我尝试了另一个与“ my_package”导入的软件包相同的事情,即“ shiny”。这里没有问题。安装“ my_package”后,“ shiny”位于何处都没有关系。只要在.libPath()的两个路径中的任何一个路径中都包含“ shiny”,“ my_package”就可以正常工作。

因此看来,“ plotly”的路径绝对是在安装时设置的。

1 个答案:

答案 0 :(得分:0)

上传到library(data.table) library(dplyr) #function mn <- function (x){ return(list(median = median(x), mean = mean(x))) } #bigger data g1 = data.frame( gene = gl(1e5, 1e2), value = rnorm(1e8) ) f_dt <- function() setDT(g1)[, mn(value), by = gene] f_dp <- function() g1 %>% group_by(gene) %>% do(data.frame(t(mn(.$value)))) %>% data.frame() system.time(f_dt()) #> user system elapsed #> 11.00 1.53 15.35 system.time(f_dp()) #> user system elapsed #> 38.09 0.37 39.94 时遇到了类似的问题。我正在缓存图以缩短默认情况下最初显示的图的加载时间。它可以在我的本地计算机上完美运行,但是随后在shinyapps.io上失败了,大概是因为您提到的原因。程序包在其服务器上的其他位置加载。有一个解决方法。一旦在R中生成了图,就可以手动设置相关性。在shinyapps.io上,这些是可以使用的绝对路径。您可以针对自己的用例进行编辑。

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生成的图。