В R измените значение в классе - PullRequest
0 голосов
/ 08 ноября 2018

Может быть, я думаю о классах R, как если бы они были классами в C или Java, но я не могу изменить значения:

test <- function() {

  inc <- function() {
    x <- attr( obj, "x" )
    x <- x + 1
    print(x)
    attr( obj, "x" ) <- x
    return( obj )
  }

  obj <- list(inc=inc)
  attr( obj, "x" ) <- 1
  class(obj) <- c('test')
  return( obj )
}

Когда я запускаю это:

> t <- test()
> t <- t$inc()
[1] 2
> t <- t$inc()
[1] 2

Как будто исходный объект класса не может быть изменен.

1 Ответ

0 голосов
/ 08 ноября 2018

Можно использовать лексический механизм видимости R для достижения C или Java-подобной ориентации объекта. Используйте <<-, чтобы назначить значение в родительской среде.

Ниже приведена упрощенная версия ваших примеров.

test <- function() {
    inc <- function() {
        x <<- x + 1
        print(x)
    }
    x <- 1
    list(inc=inc)
}
obj <- test()
obj$inc()
[1] 2
obj$inc()
[1] 3

См. Также ?refClass-class, что называется "ссылочными классами" в R.

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