パッケージの S3 クラスを非常に簡単に作成するコードを作成しました。print()
カスタムメソッドなどを開発できるように、新しい S3 クラスを作成しようとしています。
単純な R スクリプトでコードをテストしましたが、関数がパッケージにラップされるとすぐに、機能が壊れて S3 クラスが作成されなくなります。パッケージを作成するための再現可能なコードを提供することはできませんが、パッケージに組み込みたい機能の簡易バージョンを以下に紹介します。
私のコードは、未加工または関数内で記述されたときに完全に機能します。
x <- 1:10
class(x)
class(x) <- append(class(x),"newS3class")
class(x)
戻りますc("integer", "newS3class")
同様に、同じことを行う関数を宣言します。これもうまくいきます。実際には、私の関数foo()
は最初に入力に対して何らかのアクションを実行し、次に新しいクラスで出力を返します。
foo <- function(y) {
y <- y + 3
class(y) <- append(class(y), "newS3class")
y
}
class(1:5)
戻ります"integer"
。class(foo(1:5))
戻りますc("integer", "newS3class")
。これは予想通りです。
しかし、パッケージを開発してmypkg
実行するmypkg::foo()
と、機能が壊れます。つまり、(mypkg::foo(1:5))
ではなく「整数」を返しますc("integer", "newS3class")
。
パッケージを構成する関数からパッケージを構築する過程で、スコーピングに関して何かが起こっているため、これが機能しませんか?