如何调试像getFields这样的调用?我试过library(debug); mtrace(AB.setFields)
但没有发生任何事情。
除了有一些更好的方法来定义AB.setFields?
AB.getFields<-function(){
return(list(name,var2))
}
AB.setFields<-function(fields){
namevar<-names(fields)
for(i in 1:length(fields)) do.call("<<-",list(namevar[i],fields[[i]]))
}
AB <- setRefClass("AB", fields=c(name="character",
var2="factor"),
methods=list(getFields=AB.getFields
,setFields=AB.setFields)
)
a<-AB(name="abc",var2=factor(LETTERS[1:3]))
a$getFields()
fields<-list(name="aaa",var2=factor(1:3))
a$setFields(fields)
a$getFields()
答案 0 :(得分:3)
您想要调用实例对象的trace
方法。
a$trace("setFields")
这是setFields
方法所需的实现。
AB.setFields <- function(...) {
dots <- list(...)
fieldNames <- names(dots)
for(i in seq_along(dots))
{
assign(fieldNames[[i]], dots[[i]], attr(.self, ".xData"))
}
}
a$setFields(name="aaa",var2=factor(1:3))
可能有一些语法糖我错过了这个更漂亮,但为了得到你所有的领域,你可以使用
AB.getFields <- function(){
mget(
names(.refClassDef@fieldClasses),
envir = attr(.self, ".xData")
)
}