我试图在ReferenceClasses帮助页面的末尾重复这些示例 在R doc:
## a simple editor for matrix objects. Method $edit() changes some
## range of values; method $undo() undoes the last edit.
mEdit <- setRefClass("mEdit",
fields = list( data = "matrix",
edits = "list"),
methods = list(
edit = function(i, j, value) {
## the following string documents the edit method
'Replaces the range [i, j] of the
object by value.
'
backup <-
list(i, j, data[i,j])
data[i,j] <<- value
edits <<- c(edits, list(backup))
invisible(value)
},
undo = function() {
'Undoes the last edit() operation
and update the edits field accordingly.
'
prev <- edits
if(length(prev)) prev <- prev[[length(prev)]]
else stop("No more edits to undo")
edit(prev[[1]], prev[[2]], prev[[3]])
## trim the edits list
length(edits) <<- length(edits) - 2
invisible(prev)
},
show = function() {
'Method for automatically printing matrix editors'
cat("Reference matrix editor object of class",
classLabel(class(.self)), "\n")
cat("Data: \n")
methods::show(data)
cat("Undo list is of length", length(edits), "\n")
}
))
xMat <- matrix(1:12,4,3)
xx <- mEdit(data = xMat)
xx$edit(2, 2, 0)
xx
xx$undo()
mEdit$help("undo")
stopifnot(all.equal(xx$data, xMat))
utils::str(xx) # show fields and names of non-trivial methods
## add a method to save the object
mEdit$methods(
save = function(file) {
'Save the current object on the file
in R external object format.
'
base::save(.self, file = file)
}
)
x = matrix(1:12, 3, 4)
xx = mEdit(data=x)
xx$show()
xx$edit(2, 2, 0)
xx$show()
xx$undo()
xx$show()
mEdit$help("undo")
xx$data == x
utils::str(xx)
tf = paste(tempfile(), ".Rdata", sep="")
tf
xx$save(tf)
除了保存的对象似乎什么都不包含外,一切正常:
/////////////////////////////////
load("fileb473ff584c9.Rdata")
/////////////////////////////////
ls()
character(0)
答案 0 :(得分:3)
将保存方法的定义更改为
mEdit$methods(
save = function(file) {
'Save the current object on the file
in R external object format.'
myMat = .self
base::save(myMat, file = file)
}
)
现在,当您发出ls
命令myMat
时,将会列出
或使用带all.names = TRUE
的ls,因为变量.self
默认隐藏
> ls(all.names = TRUE)
[1] ".__C__Config" ".__C__foo" ".__C__mEdit" ".__global__"
[5] ".Random.seed" ".rChart_object" ".requireCachedGenerics" ".self"
> .self
Reference matrix editor object of class "mEdit"
Data:
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
Undo list is of length 0
在mEdit类上启用制表符完成
.DollarNames.mEdit <- function(x, pattern){
grep(pattern, getRefClass(class(x))$methods(), value=TRUE)
}