web-dev-qa-db-ja.com

R:自作パッケージでmagrittrパイプ演算子を使用

magrittrデータ変換をチェーンするために自分で作成したパッケージで、dplyrパッケージで導入されたパイプ演算子%>%を使用したいと思います。 magrittrは、ImportファイルでDESCRIPTIONとしてリストされます。自分のパッケージをロードし、パイプ演算子を使用する関数をテストした後、次のエラーメッセージが表示されます。

関数名のエラー(パラメーター、:関数 "%>%"が見つかりませんでした

パッケージをこれ以上ビルドできないため、関数ソースコードで%>%magrittr::%>%に変更しても役に立ちません。

83
alexander keth

magrittrDependsがリストされていれば、正しく動作するはずです。ただし、これは 推奨されません です。代わりに、magrittrImportsを残し、NAMESPACEに次の行を追加します。

importFrom(magrittr,"%>%")

R拡張機能の記述 を読むことをお勧めします。あなたの質問は1.1.3項と1.5.1項でカバーされています。

87
tonytonov

1つの追加ソリューション-roxygenパッケージを使用します。 devtoolsパッケージの一部として実装されています。 devtoolsがインストールされたら、devtools::document()を呼び出すと、NAMESPACEが更新されます。また、ドキュメントとともに.Rdファイルを自動ビルドします。これは便利です。

あなたがすることは、そのパッケージからすべての関数をインポートするためにファイルに_#' @import packagename_という形式の特別なコメントを追加するか、関数をインポートするために_#' @importFrom packagename functionname_を追加することです。これらのコメントはファイルにいくつでも含めることができるため、各ファイルの先頭に、または外部関数を必要とする各関数とともに、コメントのセットを含めることができます。

次にdevtools::document()を実行し、コードを解析してそれらのコメントを探し、適切なNAMESPACEファイルを作成します。簡単です。

29
Mike Stanley

パッケージ内のパイプをサポートする簡単な方法があります。すばらしいパッケージusethisには、関数use_pipe()があります。その関数を1回実行すると、すべてが処理されます。これは、usethisドキュメントでuse_pipe()関数がどのように説明されているかです。

パッケージ内でmagrittrのパイプを内部で使用し、パッケージのユーザー向けに再エクスポートするために必要なセットアップを行います。

DESCRIPTIONの「インポート」にmagrittrを追加します

必要なroxygenテンプレートを使用してR/utils-pipe.Rを作成します

16
Andrew Brēza

あなたがRStudio、Hadleyのdevtoolsパッケージを使用しており、magrittrファイルのImportsセクションにDESCRIPTIONをリストしていると仮定すると、%>%がパッケージ関数。

まず、関数foo.Rを作成します。

#' Convert \code{data.frame} to \code{list}.
#' 
#' @importFrom magrittr %>%
#' @name %>%
#' @rdname pipe
#' @export
#' @param x A \code{data.frame} object.
#' @examples
#' my_result <- foo(iris)
#'
foo <- function(x) {
    x %>%
        as.list()
}

次に、devtools::document()を実行します。

第三に、devtools::load_all()を実行します。

this のようなファイルがR/ディレクトリに作成され、関数は期待どおりに動作するはずです。

15
Jubbles