Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Docker在闪亮的app R包中加载包_R_Docker_Shiny - Fatal编程技术网

使用Docker在闪亮的app R包中加载包

使用Docker在闪亮的app R包中加载包,r,docker,shiny,R,Docker,Shiny,我有一个闪亮的应用程序,其中使用server.R文件中的library()加载包。这是可行的,但我不确定这是否是最好的方法 当我将此应用程序转换为R软件包时,我删除了库调用。添加了一个描述文件和一个R文件,我在其中创建了如下函数: ... #' @importFrom tidyr gather spread #' @importFrom viridisLite viridis inferno magma plasma #' @importFrom writexl write_xlsx #' @e

我有一个闪亮的应用程序,其中使用server.R文件中的
library()
加载包。这是可行的,但我不确定这是否是最好的方法

当我将此应用程序转换为R软件包时,我删除了
调用。添加了一个描述文件和一个R文件,我在其中创建了如下函数:

...
#' @importFrom tidyr gather spread
#' @importFrom viridisLite viridis inferno magma plasma
#' @importFrom writexl write_xlsx
#' @export
#' 
run_my_app <- function(display.mode="normal",launch.browser=TRUE,...) {
  appDir <- system.file("app", package="mypackage")  
  shiny::runApp(appDir,display.mode=display.mode,launch.browser=launch.browser,...)
}
当像docker run--rm-p 127.0.0.1:3838:3838 myimage那样运行时,这会正确启动应用程序,但依赖项包中的函数不起作用,可能是因为我没有任何
library()
require()
调用

这是第二种方法(就像用户使用闪亮的appr软件包一样),它避免了上述大部分脚本

EXPOSE 3838
RUN Rscript -e 'library(mypackage);mypackage::run_my_app(port=3838,host="127.0.0.1",launch.browser=FALSE)'
但是我已经被docker构建映像卡住了,因为它在构建期间开始运行应用程序,并且应用程序也不能正常工作

当然,我可以跳过R包部分,只使用docker中闪亮的应用程序,但这需要维护另一组代码。我想我更愿意把这个闪亮的应用程序作为一个R包


如何在停靠闪亮的应用程序R包时使用库的最佳方式?

事实证明,在docker容器中启动闪亮的应用程序有多种方式。它们的工作方式也不同。讨论了细节

我最终选择了第一个方法(出于上面链接中讨论的原因),并保留了
library()
调用。调用已移动到一个文件
functions.R
(具有其他帮助函数),该文件源于
ui.R
server.R
,如
source(“functions.R”,local=TRUE)
。不确定是否需要
local=TRUE
。我在别处看到了它的推荐

关于如何处理NAMESPACE/
library()
调用以及如何在R包中使用闪亮的应用程序的详细信息,我并不完全清楚。由于
functions.R
中的helper函数用于
ui.R
server.R
,因此我在这两个版本中都使用了它们。我不清楚先执行哪个文件

第二种方法不起作用,因为我应该使用
CMD
而不是
RUN
。大概是这样的:

...
#' @importFrom tidyr gather spread
#' @importFrom viridisLite viridis inferno magma plasma
#' @importFrom writexl write_xlsx
#' @export
#' 
run_my_app <- function(display.mode="normal",launch.browser=TRUE,...) {
  appDir <- system.file("app", package="mypackage")  
  shiny::runApp(appDir,display.mode=display.mode,launch.browser=launch.browser,...)
}

CMD[“R”、“-e”、“mypackage::run_my_app(port=3838,host='127.0.0.1',launch.browser=FALSE)”

您能提供服务器.R和
ui.R
的示例以及您收到的错误消息吗?是(见第11.2节)。