R扩展方法以依赖关系命名空间

时间:2018-11-21 12:09:33

标签: r namespaces package opencpu

我遇到以下问题:

我正在使用opencpu软件包将R软件包作为Web应用程序提供。在我的程序包中,我创建了一个RefClass,让它可以调用

.A <- setRefClass(
  ".A",
  fields = c(
    id = "integer",
    text = "character"
  )
)

加上构造函数:

A <- function(id,text ){return(.A(id,text))}

并且首先,我为该类编写了一个方法“ toJSON”,并且还提供了这样的S4方法:

.A$methods(
  toJSON = function(){
     return(sprintf('{\"id\": %s, \"text\": %s}',id,text))
})

  setMethod("toJSON", c(".A"),function(x,...){
    x$toJSON()
  })

到目前为止,一切都很好。安装软件包并运行opencpu时,我可以调用A方法而不会出现问题:(带有参数的POST,例如:{id: 123, text: "Hallo World"}

SERVERADRESS/ocpu/library/PACKAGENAME/R/A

但是当我希望将返回值直接转换为JSON时,会出现以下错误:

No method for S4 class:.A

看一下opencpu网站,发现在这种情况下调用的过程是:

library(jsonlite)
args <- fromJSON('{"id": 123, "text": "Hallo World"}')
output <- do.call(PKGNAME::A,args)
toJSON(output)

但是,如果我在常规R会话中运行它,它将运行良好。但是,如果我将最后一行从toJSON(output)更改为jsonlite::toJSON(output),该错误就可以重现 因此,我认为这可能是问题所在,我想知道是否可以将我的带有签名“ .A”的“ toJSON” S4方法添加到包中的“ jsonlite”的命名空间中?

有什么想法吗?

0 个答案:

没有答案