创建打印summary.dynlm的summary.newclass

时间:2017-05-31 17:46:19

标签: r methods

问题:我想在Achim Zeileis的dynlm软件包中构建summary.dynlm。我可以使用summary.lm执行以下操作,但不能使用summary.dynlm执行以下操作。

我正在慢慢学习R的高级编程方面,并且正在将我自己的包转换为使用S3方法来实现更清晰的功能输出的包。在这种情况下,我想让我的方法运行现有的方法,因为我只是做了一些小的补充。

为简单起见和重现性,请参阅以下代码:

library(dynlm)
mod <- dynlm(interest ~ loggnp, M1Germany)
class(mod) <- c("newclass","dynlm","lm")

summary.newclass <- function(x, ...){
  cat(" some new stuff here")
  "if"(TRUE, cat("\n\tmaybe more here\n"), cat("\n\t oo fancy new stuff\n"))
  print(summary.lm(x)) # Works with lm
  #print(summary.dynlm(x)) # What I want to run instead
}
summary(mod)

当我发表评论print(summary.lm(x)),取消注释print(summary.dynlm(x))并运行时,我收到以下错误:

 Error in print(summary.dynlm(x)) : 
  could not find function "summary.dynlm"

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为正确的方法是派遣到summary.dynlm,而不是直接拨打NextMethod()

您的代码变为

library(dynlm)
mod <- dynlm(interest ~ loggnp, M1Germany)
class(mod) <- c("newclass","dynlm","lm")

summary.newclass <- function(x, ...){
  cat(" some new stuff here")
  print(NextMethod())
}

summary(mod)

应该注意的是source code for summary.dynlm使用相同的原则作为其输出的一部分发送到summary.lm