我做了一个classset函数,该函数返回设置了其类的变量列表。对其进行调用正在完成预期的工作,但是在对其相关功能进行调用时,将调用输入到默认功能中。
classset <- function(stud= TRUE, res = pass)
{
entry = list(student = stud, result= res)
class(entry) <- "registration"
return(entry)
}
setrecord <- function(rec,newval)
{
print("in setting")
UseMethod("setrecord",rec)
}
setrecord.default <- function(m,n)
{
print("in def")
return(m)
}
setrecord.classset <- function(m,n){
print("in class func")
m$stud <- aqqi
m$res <- n
return(m)
}
reh <- classset("aqqi","pass")
reh$student
[1] "aqqi"
reh$result
[1] "pass"
reh <- setrecord(reh,"fail") ##Expecting call to setrecord.classet
[1] "in setting"
[1] "in def" # expected to print "in class func"
class(reh)
[1] "registration"
我实际上希望调用特定于类的函数setrecord.classset。 感谢任何人都可以指出我在此方面所缺少的。
答案 0 :(得分:2)
所以问题在于,您没有为班级classset
命名,而是为registration
命名,如下所示:
classset <- function(stud= TRUE, res = pass)
{
entry = list(student = stud, result= res)
class(entry) <- "registration" ### XXX: This is the name of the class
return(entry)
}
因此,我们需要为registration
类创建一个S3方法:
setrecord.registration <- function(m,n){
print("in class func")
m$stud <- "aqqi" # Note I also had to add the quotation marks here
m$res <- n
return(m)
}
reh <- classset("aqqi","pass")
reh$student
# [1] "aqqi"
reh$result
# [1] "pass"
reh <- setrecord(reh,"fail") # Will call setrecord.registration()
# [1] "in setting"
# [1] "in class func"
reh
# $student
# [1] "aqqi"
#
# $result
# [1] "pass"
#
# $stud
# [1] "aqqi"
#
# $res
# [1] "fail"
#
# attr(,"class")
# [1] "registration"