写包时R中找不到文件:正确的做法是什么?

问题描述 投票:0回答:1

我在用以下方法编写一个R包 plumber. 主代码。

#' @title startServer
#' @description Start the api server on port `port`
#'
#' @param port Port number
#' @return none
#' @examples
#' startServer(8000)
#' @export
startServer <- function(port) {
  port <- if (port == "")
    port = "8000"

  router_some <- plumber$new("R/some.R")
  router <- plumber$new()
  router$mount("/some", router_some)

  router$run(host = '0.0.0.0',
             port = strtoi(port),
             swagger = TRUE)
}

这段代码在R控制台运行时很好用。

startServer("8000")
Running plumber API at http://0.0.0.0:8000
Loading required namespace: swagger
Running Swagger UI  at http://127.0.0.1:8000/__swagger__/

但是,当我运行 check():

checking examples ... ERROR
  Running examples in ‘...’ failed
  The error most likely occurred in:

  > base::assign(".ptime", proc.time(), pos = "CheckExEnv")
  > ### Name: startServer
  > ### Title: startServer
  > ### Aliases: startServer
  > 
  > ### ** Examples
  > 
  > startServer(8000)
  Error in .subset2(public_bind_env, "initialize")(...) : 
    File does not exist: R/some.R
  Calls: startServer -> <Anonymous> -> <Anonymous>
  Execution halted

已找不到包含路由的文件。如何指向正确的文件?


我知道我可以使用 plumber 但是,我似乎失去了一个合适的 swagger 文件生成(没有参数)。

r r-package plumber
1个回答
0
投票

如果你知道如何构建包,那就很简单了:在构建过程中,所有的代码实际上都是以R对象结构的形式执行和存储的。我们这里需要的是在构建时绑定路由器,并公开函数 startServer 当完成时。或者:在构建时可以执行所有的路由器逻辑。只有启动服务器(router$run)应在 startServer

router_some <- plumber$new("R/some.R")
router <- plumber$new()
router$mount("/some", router_some)

#' @title startServer
#' @description Start the api server on port `port`
#'
#' @param port Port number
#' @return none
#' @examples
#' startServer(8000)
#' @export
startServer <- function(port) {
  port <- if (port == "")
    port = "8000"
  router$run(host = '0.0.0.0',
             port = strtoi(port),
             swagger = TRUE)
}
© www.soinside.com 2019 - 2024. All rights reserved.