教えるときに使用するローカル パッケージ内の R stats パッケージの print.anova() 関数をオーバーライドしようとしています。基本的に、新しいクラスで新しい関数 (ANOVA() など) を作成せずに、見出しの印刷を削除し、「合計」行を追加したいと考えています。
関数は次のようになります。
print.anova <- function(x,digits=max(getOption("digits")-2,3),
signif.stars=getOption("show.signif.stars"),totalSS=TRUE,rm.heading=TRUE,...) {
if (!any(grepl("Res.Df",colnames(x)))) { # exclusion for multiple lm objects
if (!any(grepl("Levene",attr(x,"heading")))) { # exclusion for levenes.test
if (totalSS) { # add total SS row
x <- rbind(x,c(sum(x$Df),sum(x[,"Sum Sq"]),NA,NA,NA))
row.names(x)[dim(x)[1]] <- "Total"
}
}
}
if (rm.heading) attr(x,"heading") <- NULL # remove heading
stats::print.anova(x,digits=digits,signif.stars=signif.stars,...)
invisible(x)
}
私の問題は、これを関数、メソッド、S3 メソッド、それらの組み合わせ、またはまったく別のものとしてエクスポートするかどうかわからないことです。たとえば、これを試すと(roxygenizeコードの一部):
#'@export
Rcmd チェックを実行すると、次の警告が表示されます。
S3 methods shown with full name in documentation object 'print.anova':
'print.anova'
しかし、パッケージをロードすると、関数は期待どおりに機能します。
ただし、これを試してみると:
#'@method print anova
#'@S3method print anova
Rcmd チェックでは警告やエラーは発生しませんが、R で関数を使用しようとすると、統計パッケージの名前空間で元の関数が見つかります。さらに、こうすると
getAnywhere(print.anova)
私はこれを取得します
2 differing objects matching ‘print.anova’ were found in the following places
package:stats
registered S3 method for print from namespace stats
namespace:NCStats
namespace:stats
最後に、このバージョン (export を使用せず、メソッドと S3method を使用) では、roxygen で開発した名前空間に次の項目があります。
S3method(print,anova)
私の混乱を招くのは、他の関数で同様のことを行うことに成功したように見えることです (たとえば、print.summary.lm でメソッドと S3 メソッド バージョンを使用する)。
ここで何が間違っているか (または、最終的にこの目標を達成する方法) を理解するのに助けていただければ幸いです。よろしくお願いします。
ps、価値のあるものとして、私は Windows 7 (32 ビット)、R 2.15.2、および RStudio を使用しています。