Сохранить поле ссылочного класса R
Я пытаюсь сохранить поле ссылочного класса R:
myclass = setRefClass("myclass",
fields = list(
x = "numeric",
y = "numeric"
))
myclass$methods(
dfunc = function(i) {
message("In dfunc, I save x and y...")
base::save(.self$x, .self$y, file="/tmp/xy.rda")
}
)
myclass$methods(
initialize = function(x, y) {
x <<- x
y <<- y
}
)
Видимо, это не работает:
x = myclass(5, 6)
x$afunc(1)
x$dfunc()
Error in base::save(.self$x, .self$y, file = "/tmp/xy.rda") :
objects ‘.self$x’, ‘.self$y’ not found
Затем я попытался присоединиться.self:
myclasr = setRefClass("myclass",
fields = list(
x = "numeric",
y = "numeric"
))
myclass$methods(
dfunc = function(i) {
message("In dfunc, I save x and y...")
attach(.self)
base::save(x, y, file="/tmp/xy.rda")
detach(.self)
}
)
myclass$methods(
initialize = function(x, y) {
x <<- x
y <<- y
}
)
Получил еще одну ошибку:
Error in attach(.self) :
'attach' only works for lists, data frames and environments
1 ответ
Решение
Ты можешь использовать
myclass$methods(
dfunc = function(i) {
message("In dfunc, I save x and y...")
tempx <- .self$x
tempy <- .self$y
base::save(tempx, tempy, file="xy.rda")
}
)
или же
myclass$methods(
dfunc = function(i) {
message("In dfunc, I save x and y...")
base::save(x, y, file="xy.rda")
}
)
save
использования as.character(substitute(list(...)))[-1L]
так что буквально ищет переменную с именем .self$x
которого, конечно, не существует.