2017-10-27 12 views
2

パッケージの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")ではなく「整数」を返します。

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

+0

パッケージはgithub – rawr

+0

にありますか?多分この週末 – Locutus

答えて

0

ここで私がした間違いは、クラスを適切にエクスポートしなかったことです。これを修正するために、roxygenパッケージを使用してドキュメントとNAMESPACEを構築する前に、エクスポート行を含む次のコードブロックを追加しました。

#' @export summary.objectclass 
makeobjectclass <- function(x) { 
    class(x) <- c("objectclass", class(x)) 
    x 
} 
関連する問題