1
いくつかのカスタムクラスに適用されるsvd
関数のS3メソッドを作成しようとしています。できるだけ再現可能なものにするために、問題を示すために以下の簡単な例があります。'svd'にS3メソッドをエクスポートして使用しますか?
roxygen2
を使用する:
# create generic
svd <- function(x, ...) UseMethod("svd")
# add defai;t
svd.default <- base::svd
#' @export
svd.foo <- function(x, ...){
print("called svd.foo")
return(NULL)
}
私はその後、パッケージをビルドしてリロードしてください。私はNAMESPACE
で見ることができます:
S3method(svd,foo)
しかし、私はメッセージではなく、次の取得コールしようとすると:それはまだベースsvd
メソッドを呼び出します
set.seed(123)
mat <- matrix(rnorm(16), 4)
class(mat) <- "foo"
svd(mat)
$d
[1] 2.5909540 2.2850508 1.2608444 0.1467173
$u
[,1] [,2] [,3] [,4]
[1,] -0.1212454 0.3981507 -0.1101441 0.90257625
[2,] 0.4356515 0.4471180 -0.7466406 -0.22982835
[3,] 0.4227691 -0.7681500 -0.3229738 0.35622984
[4,] -0.7853493 -0.2269518 -0.5710376 -0.07506889
$v
[,1] [,2] [,3] [,4]
[1,] 0.2204894 -0.6736805 -0.2459399 0.66109954
[2,] 0.7409901 0.3288187 -0.5720323 -0.12486370
[3,] 0.0478777 -0.6541094 -0.1526053 -0.73929712
[4,] -0.6324760 0.1008651 -0.7674661 0.02821745
を。どうすればこれを達成できますか?
'svd'はS3メソッドではありません。ソースコードを見ると、 'UseMethod'はありませんので、呼び出されるたびに通常の' svd'を実行します。 – Carl
これでやってもらえますか?さもなければ、私はS4メソッド用の新しいジェネリックを作成することができます。 – cdeterman
@cdeterman確かに 'svd = function(x、...)UseMethod( 'svd')'と 'svd.default = base :: svd'を提供するだけで' svd'をS3ジェネリックにすることができます。 S4に行く必要はありません。 –