R расширить метод для зависимости пространства имен - PullRequest
0 голосов
/ 21 ноября 2018

У меня следующая проблема:

Я использую пакет 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" в моем пакете?

Есть идеи?

...