2016-07-06 8 views
2

私はneuralnetを使用してニューラルネットワークをトレーニングしています。パッケージ、具体的には、プロット関数neuralnetは、昨年から基本パッケージであるgridに依存しています。しかし、私は手動でgridをロードしない限り、プロットが失敗した:library(grid)を使用してrequireNamespaceが必要な機能をロードしていません

AND <- c(rep(0,7),1) 
OR <- c(0,rep(1,7)) 
binary.data <- data.frame(expand.grid(c(0,1), c(0,1), c(0,1)), AND, OR) 
net <- neuralnet::neuralnet(AND + OR ~ Var1 + Var2 + Var3, binary.data, 
         hidden = 0, linear.output=FALSE) 

if(requireNamespace("grid")) { 
    neuralnet::plot.nn(net) 
} 

> Error in plot.nn(net, rep = i, x.entry, x.out, radius, arrow.length, intercept, : 
> could not find function "grid.newpage" 

は役立ちますが、私は後で自分のパッケージにそれを使用したいのでことを避けたいです。 R PackagesrequireNamespaceを使用するように提案していますが、上記のようにどちらも役に立ちません。

grid関数のすべての呼び出しの前にgrid::を追加し、ソースからパッケージをビルドすると問題が解決されますが、それは意図された動作ですか? neuralnetの出典を見ると、requireNamespace,libraryまたはこれに類するものについては触れられていません。しかし、それではなぜ私のrequireNamespaceは荷物を積み重ねてくれませんか?

答えて

1

問題がインポートその場合、それは代わりに(または、少なくとも)べきneuralnetのみグリッドパッケージにに依存することです。 (両者の違いの一つ議論についてSee here。)結果

、検索に取り付けられているグリッド場合grid.newpage()を呼び出しneuralnet関数は、それだけでその機能を見つけることができるようになりますパス。しかし、neuralnet::neuralnet()への完全な電話は、ニューラルネットを添付しません。これは、グリッドの添付ファイルをトリガーします。検索パスにグリッドがないと、grid.newpageが何であるかわかりません。

は、neuralnetグリッドをインポートし、そのDESCRIPTIONファイル

Imports: grid 

に、ソースパッケージのNAMESPACEファイル

import(grid) 

と、この行に次の行を追加し、それを再コンパイルします。

+0

ありがとうございました。今、私のパッケージを公開すると、人々はコンパイルされたバージョンではなく、CRANの 'neuralnet'パッケージを使用します。私のコードから問題を回避することができますか? 'attachNamespace'を使って? – sebastianmm

+0

@sebastianmmこれまでに(そして*それが指摘している答えで)リンクされた私の他の答えで述べたように、パッケージメンテナーに連絡してパッケージのインポート** grid ** 。追加する必要がある行を提供することもできますし、テストしたこと、そしてそれが機能することを知らせることもできます。それ以外は**神経ネット**に依存しなければならないと思うので、**グリッド**が付いてくると残念です。 –

+0

それでは、neuralnetを 'Imports'から' Depends'に移動するだけですか?とにかく私はメンテナーに連絡します。再度、感謝します。 – sebastianmm

関連する問題