gpt4 book ai didi

r - 如何调试引用类中的方法?

转载 作者:行者123 更新时间:2023-12-04 04:42:49 24 4
gpt4 key购买 nike

如何调试像 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()

最佳答案

您想调用实例对象的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")
)
}

关于r - 如何调试引用类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18639140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com