6

tmPlotの関数を使用するパッケージがありますが、関数treemapを使用しようとすると、依存関係の 1 つが読み込まれていないというエラーがスローされます。

Error in tmPlot(data, index = index, vSize = vSize) : 
  could not find function "brewer.pal"

依存関係がインストールされ、名前空間に配置されます。

この質問には、パッケージの問題であるセットアップが少しありますが、できるだけ最小限にしようとしました:

treemap(およびそのすべての依存関係) がインストールされていることを確認します。

「anRpackage」というディレクトリを作成しました。その中には、フォルダー ('R') と、次のテキストを含む記述ファイルがあります。

Package: anRpackage
Title: What the package does (short line)
Version: 1.0
Author: Who wrote it
Maintainer: Who to complain to <yourfault@somewhere.net>
Description: More about what it does (maybe more than one line)
License: What license is it under?
Imports:
    treemap
Collate:
    'maketree.R'

R/ フォルダー内には、'maketree.R' という単一の R ファイルがあります。その内容は次のとおりです。

#' maketree
#' 
#' @importFrom treemap tmPlot
#' @export maketree

maketree <-
function(data, index, vSize){
  tmPlot(data, index=index, vSize=vSize)
}

「anRpackage」の上のディレクトリにいると仮定して、次のスクリプトを実行します。

library(roxygen2)
roxygenise("anRpackage/")

library(devtools)

build("anRpackage")
install("anRpackage")

R を (できれば --vanilla を使用して) 再起動し、次を実行します。

library(anRpackage)

data(mtcars)
maketree(mtcars, "cyl", "mpg")

最初に説明したエラーが表示されるはずです。なぜこれが起こるのですか?RColorBrewerの Depends としてリストされているtreemapので、自動的にインポートされるはずですよね?

4

3 に答える 3

10

問題は実際にはツリーマップにあります。treemapを使用するbrewer.palので、 と を使用する必要がImports: RColorBrewerありimportFrom(RColorBrewer, brewer.pal)ます。

今のところ、ユーザーがlibrary(treemap)、ツリーマップと RColorBrewer がsearch()パスに付いていて、tmPlotが評価されたときbrewer.palに検索パスに見つかった場合は、すべて問題ありません。もちろん、brewer.pal="yeast"間違ったシンボルが見つかるため、ユーザーが何かを言うと、パッケージは壊れます。これが名前空間の理由の 1 つであり、ツリーマップの機能をユーザーの操作から保護します。

しかし、(正しく) Imports: treemap するとどうなるでしょうか? ツリーマップは (メモリに) ロードされますが、ツリーマップもその依存関係も (検索パスに) アタッチされません。だからbrewer.pal見つからない。

treemap が Imports: RColorBrewer だった場合、brewer.pal は、への呼び出しによってツリーマップが検索パスにアタッチされたlibrary(treemap)ときと、パッケージにインポートされたときの両方で見つかります。

ツリーマップの管理者に連絡して、名前空間をより慎重に構築するよう依頼してください。

于 2013-02-11T13:33:40.560 に答える
1

を呼び出す前にtmPlot(data, index = index, vSize = vSize)、RColorBrewer をロードする必要があります。

require(RColorBrewer)
于 2013-10-02T03:40:25.303 に答える
0

Importsファイルの代わりに使用していることが原因だと思いDependsますDESCRIPTION

を使用するDepends: treemapと、treemap パッケージをロードするときにパッケージがロードおよびアタッチされるため、treemap依存関係もロードされます。

を使用するImports: treemapと、指定された名前空間のみがインポートされます。つまりtreemap、関数で変数を使用できます。しかし、この場合、treemap依存関係が読み込まれていないようです。

したがって、使用するかDepends: treemap(最近では の使用が促進されているようです)、パッケージから直接Importsインポートする必要があると思います。RColorBrewer

申し訳ありませんが、これがあなたの質問に本当に答えているかどうかはわかりません。また、これらすべての点をすでに完全に認識している可能性があります...

于 2013-02-11T12:46:35.157 に答える