23

RStudio でビルドしてきた R パッケージがあります。それを と呼びましょうmy_pkgdevtools::load_all(".")RStudio 内で (具体的にはショートカットを使用して)実行するとCtrl + Shift + L、次のメッセージが表示されます。

Loading my_pkg
Warning messages:
1: character(0) 
2: character(0) 
3: character(0) 
4: character(0) 
5: character(0)

パッケージ内のすべての機能は正常に動作します。私のファイルNAMESPACEDESCRIPTIONファイルは、構文エラーなしで完全です。しかし、を実行する?my_pkgと、ヘルプ ファイルがファイルで提供されている仕様と一致しませんDESCRIPTIONImportsからを削除すると、警告メッセージは表示されDESCRIPTIONなくなります。character(0)もちろん、それらのインポートが必要です。に変更ImportsするとSuggestscharacter(0)警告メッセージが表示されます。

以下は記述ファイルの内容で、IP を保護するために一部変更されています。

Package: scoutdroid
Title: This is where the title is.
Version: 0.1
Authors@R: "Ben Hanowell <benjamin.hanowell@redfin.com> [aut, cre]"
Description: This is where the description is.
Depends:
    R (>= 3.1.0)
Imports:
    dplyr,
    lubridate,
    mboost,
    randomForestSRC,
    RODBC,
    stringr
License: file LICENSE
LazyData: true

そして、ここにありNAMESPACEます。

# Generated by roxygen2 (4.0.1): do not edit by hand

import(RODBC)
import(dplyr)
import(lubridate)
import(mboost)
import(parallel)
import(randomForestSRC)
import(stringr)

[ビルド] タブで RStudio の [ビルドとリロード] ボタンを使用すると、次の警告が表示されます。

** 遅延読み込み用のパッケージの準備

Warning: replacing previous import by 'lubridate::intersect' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::setdiff' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::union' when loading 'scoutdroid'

edit人々が何が起こっているのかを理解するのを助けるために、いくつかの詳細を追加しました。

edit 2ファイルも追加しましたDESCRIPTIONが、独自の完全なパッケージは提供していません。

編集 3 を追加しましNAMESPACEた。

編集 4 [ビルド] タブで RStudio の [ビルド & リロード] ボタンを使用したときに発生する警告を追加しました。

4

2 に答える 2

25

コメントでいくつかの対話を行った後load_all、関数名の競合が原因で、パッケージをロードするときに実際に表示される空の警告が開始されることがわかりました。

問題は、パッケージから関数をインポートし、その関数を上書きしていることです。その場合、RStudio で [Build & Reload] をクリックしたときに見たように、R は警告をスローします。

Warning: replacing previous import by 'lubridate::intersect' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::setdiff' when loading 'scoutdroid'
Warning: replacing previous import by 'lubridate::union' when loading 'scoutdroid'

実際の警告の代わりにload_all表示されるのは、これらの警告を消し去ろうとしている可能性があるためです (単なる推測です)。character(0)(これらの特定の警告を黙らせるのは困難です。)

通常、パッケージの名前空間全体をインポートすることはお勧めできません。代わりに、必要なシンボルのみをインポートする必要があります。詳細については、私のこの投稿を参照してください。

解決策は、NAMESPACE ファイルimportFromの代わりに使用することです。import

于 2014-09-30T01:04:55.717 に答える