4

パッケージの 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")

パッケージを構成する関数からパッケージを構築する過程で、スコーピングに関して何かが起こっているため、これが機能しませんか?

4

1 に答える 1