我遇到以下问题:
我正在使用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”的命名空间中?
有什么想法吗?