您應該可以通過爲您的類定義一個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)
}
})
測試了這一點,
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
方法是沒有必要的,但它不會傷害到要麼
輝煌!感謝您的幫助! –