パッケージのS3クラスを作成するコードを書いています。新しいS3クラスを作成して、たとえばカスタムのprint()
メソッドを開発できるようにします。Rパッケージの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")
ではなく「整数」を返します。
構成機能からパッケージを構築する過程で、スコープに関する何かが起こっているため、これが機能しなくなっていますか?
パッケージはgithub – rawr
にありますか?多分この週末 – Locutus