Вы должны сделать это, указав метод initialize
для вашего класса, который читает файл по умолчанию. Используя этот класс в качестве примера,
bed_object <- setClass(
"bed_object",
slots = c(data.file = "character",
data = "data.frame"
),
prototype = list(
## system.file("data/default-data.Rdata", package = "mypackage")
data.file = "default-data.Rdata",
data = data.frame()
),
validity = function(object) {
if (!file.exists("default-data.Rdata")) {
stop(sprintf("Could not find %s!", [email protected]))
}
tmp.env <- new.env()
.x <- try({
suppressWarnings(load([email protected], envir = tmp.env))
}, silent = TRUE)
if (inherits(.x, "try-error")) {
stop(sprintf("Could not read %s!", [email protected]))
}
TRUE
}
)
initialize
метод может выглядеть следующим образом:
setMethod("initialize", "bed_object", function(.Object, ...) {
.Object <- callNextMethod()
if (validObject(.Object)) {
tmp.env <- new.env()
x <- load([email protected], envir = tmp.env)
[email protected] <- tmp.env[[x[1]]]
invisible(.Object)
}
})
Testing это,
Df <- data.frame(x = 1:5, y = 6:10)
save(Df, file = "default-data.Rdata")
## default
b1 <- new("bed_object")
[email protected]
# x y
#1 1 6
#2 2 7
#3 3 8
#4 4 9
#5 5 10
## invalid data file
b2 <- new("bed_object", data.file = "xyz.Rdata")
#Error in validityMethod(object) : Could not read xyz.Rdata!
Пару замечаний:
- Вы захотите заменить мой файл по умолчанию
default-data.Rdata
тем, что вы отправляете вместе с пакетом; что-то вроде system.file("data/default-data.Rdata", package = "mypackage")
validity
метод не является необходимым, но это не помешает иметь либо
Brilliant! Спасибо за помощь! –