问题:我想在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"
感谢您的帮助。
答案 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
。