13

Rパッケージをまとめています。サンプル データ ファイル (パッケージに含まれる) を使用して (サンプル) 出力ファイルを生成するビネットでサンプル コードを示したいと思います。

Hadley Wickham の投稿 ( http://r-pkgs.had.co.nz/data.html ) でサンプル データの使用について読み、生成するには解析する必要があるため、サンプル データを生データとして保持する必要があると考えています。出力。

そのため、パッケージ構造にディレクトリを作成しました

/Users/userName/myPackage/inst/extdata/

サブディレクトリ InputFiles と OutputFiles があります。

サンプル ファイル (exampleData.csv) を InputFiles サブディレクトリ (/Users/userName/myPackage/inst/extdata/InputFiles) 内に配置しました。

私のビネットは次の場所にあります。

/Users/userName/myPackage/vignettes/myPackage.Rnw

次の構文が含まれます。

<<eval=FALSE>>=
fileString = "/Users/userName/myPackage/inst/extdata/InputFiles/exampleData.csv"
doFunction1(fileString)
doFunction2(fileString)
doFunction3(fileString, output ="Users/userName/myPackage/inst/extdata/OutputFiles")
@

このビネットとそのサンプル データセットの開発には 2 つの問題があります。

1) extdata ファイルの使用が適切かどうか確信が持てません。前述の Hadley Wickham のリファレンスによると、これがサンプル ファイルを配置するのに最適なディレクトリ名と場所のようです。

2) パスウェイを絶対的なものではなく、相対的なものにする方法がわかりません。ご覧のとおり、このサンプル コードは自動的には実行されません。代わりに、eval=FALSE の R チャンクの下にあるので、ユーザーが自分でテストできるように単純にリストされます。サンプル コードを実行した後、ユーザーは、出力ファイルが実際に (/Users/userName/myPackage/inst/extdata/OutputFiles) に作成されたことを確認することもできます。例に従うときにユーザーが絶対パスを使用する必要がないようにするための最良の方法は何ですか? パッケージ ディレクトリ myPackage 内から相対パスをたどることは可能ですか?

私のデータ ファイルは、.csv、.htm、および .text ファイルで構成されています。以前は、パッケージを構築するときに、データ フレームを .rda ファイルとして保存していたので、ユーザーは次のように簡単に使用できました。

data(example.rda)

そのファイルを読むために。彼らは経路全体を書く必要はありません。.csv、.html、および .text ファイルを読み取り、それらを例の出力場所に出力するために使用できる同様の関数はありますか?完全な経路を使用する必要はありませんか? 入力ファイルを読み込んで出力ファイルに書き込むヘルプ機能を持たせることは可能でしょうか? /man フォルダー内のさまざまなサンプル ヘルプ関数がサンプル出力ファイルをサンプル出力フォルダーに物理的に保存する場合、CRAN で競合が発生しますか?

4

1 に答える 1

7

パッケージ内のファイルを参照する標準的な方法は次のとおりです。

# gives root package directory
system.file(package="myPackage") 

# specific file
system.file("extdata/InputFiles/exampleData.csv", package="myPackage") 

# best is to use cross-platform way to write a file path:
system.file("extdata", "InputFiles", "exampleData.csv", package="myPackage") 

で開発するdevtools場合、instサブディレクトリは無視されるため、絶対パスについて心配する必要はありません。これはビネットで機能するはずです。ビネットは、開発環境にロードした可能性のあるパッケージではなく、インストールされたバージョンのパッケージのみを使用することに注意してください(具体的にdevtools::load_all()は、ビネットのビルドに使用されるコードを変更しません。install()最初にそれを行う必要があります) .

最後に、使い方data()は少し古風です。ハドリーらは遅延データの使用を推奨しているため、データは名前空間に自動的に表示されます。で次のことを試してくださいDESCRIPTION

LazyData: true
LazyDataCompression: xz
于 2015-11-06T15:17:24.960 に答える