无法在R中调用S3类函数

时间:2019-04-30 10:03:22

标签: r functional-programming

我做了一个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。  感谢任何人都可以指出我在此方面所缺少的。

1 个答案:

答案 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"