Возможны ли объекты собственных классов в R? - PullRequest
1 голос
/ 26 мая 2011

Я новичок в R, и мне было интересно, можно ли создавать объекты собственных классов. Когда я читал «help (class)», казалось, что классы, подобные Java, не возможны Я имею в виду, что я хочу иметь класс с методами, закрытыми переменными и конструктором. Например, это может выглядеть так:

className <- class {
  # private variables
  var1 <- "standardvalue"

  var2 <- TRUE
  # Constructor
  constructor (v1, v2) {
    var1 <- v1
    var2 <- v2
  }

  # Method 1
  function sum() {
    var1 + var2
  }

  # Method 2
  function product() {
    var1 * var2
  }
}

В моей основной программе я хочу создать объект этого класса и вызвать его функции. Например, как это:

# Create Object
numbers <- className(10,7)

# Call functions of the Object
numbers -> sum()      # Should give "17"
numbers -> product()  # Should give "70"

Возможно ли что-то подобное? До сих пор я не оштрафовал ни одного примера.

Спасибо за вашу помощь.

Ответы [ 2 ]

4 голосов
/ 26 мая 2011

Да, в базе R есть (по крайней мере) три ОО системы:

  • S3
  • S4
  • ReferenceClasses

плюс дополнительные OO-подобные фреймворки, добавленные через пакеты CRAN, такие как proto.

Пожалуйста, выполните поиск в Google для S3, S4, ReferenceClasses, OO, ..., возможно, начиная с rseek.org .Все книги по программированию на R также охватывают это;моя любимая книга Chambers (2008) под названием «Программное обеспечение для анализа данных».

0 голосов
/ 28 июня 2016

Если вы из java и, следовательно, используете атрибуты и методы private и public, я бы посоветовал вам использовать пакет R6.Смотрите эту ссылку .Тривиальный пример класса person, взятый из документации:

library(R6)
Person <- R6Class("Person",
  public = list(
    name = NA,
    hair = NA,
    initialize = function(name, hair) {
      if (!missing(name)) self$name <- name
      if (!missing(hair)) self$hair <- hair
      self$greet()
    },
    set_hair = function(val) {
      self$hair <- val
    },
    greet = function() {
      cat(paste0("Hello, my name is ", self$name, ".\n"))
    }
  )
)

Вот как вы можете создать экземпляр этого класса:

johnDoe <- Person$new("John Doe")
johnDoe$set_hair("brown")

Обратите внимание, что в отличие от java методоввызываются с помощью оператора $ после объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...