У меня следующая проблема:
Я использую пакет opencpu для предоставления своего пакета R в качестве веб-приложения.В моем пакете я создал 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)
. Поэтому я думаю, что это может быть проблемой, и я был бы удивлен, если бы я мог добавить свой метод "toJSON" S4 с подписью ".A" в пространство имен"jsonlite" в моем пакете?
Есть идеи?