19

私は Rstudio を使用して Sweave と R を合理化し、他のアナリストと共有するデータ分析を行っています。変数のコーディングを非常に明確にするために?myData、必要に応じて呼び出して役立つファイルを取得できるように、ヘルプ ファイルのようなものがあると便利です。私は Rd マークダウンが好きで、全体的な要約、変数ごとの変数、探索的分析の実行方法の例など、分析データセットを文書化する大きな可能性を実際に秘めていると思います。

特にパッケージを作成する場合はこれを行うのは簡単ですが、パッケージは最終的に関数のコレクションであり、Rnw ファイルを統合しないため、混乱すると思います。

Roxygen2 を使用して、どのパッケージにも含まれていないデータセットのヘルプ ファイルを作成できますか?

4

7 に答える 7

13

これに割って入る前に、他の人が言っていることを繰り返したいと思います。R のパッケージ システムは文字通りまさにあなたが探しているものです。コードなしでデータのみを配布するために多くの人が使用して成功しています。R のデータの遅延ロードと組み合わせると、大規模なデータセットをパッケージとして配布でき、すべてをロードしたくないユーザーに負担をかけることはありません。

さらに、パッケージを使用しないと R のヘルプ システムを利用できません。元の質問は使用について明示的に尋ねて?myDataおり、パッケージを使用しない場合、ユーザーはそれを行うことができません。これは単純に、R の基本ヘルプ機能の制限です。


さて、質問に答えます。これを機能させるには、エクスポートされていない roxygen 関数を使用する必要がありますが、それほど面倒ではありません。さらに、データを文書化する R ファイルを独自のフォルダーに配置する必要があり、そのフォルダー内に という空のフォルダーを作成する必要がありますman

ディレクトリ構造の例:

# ./
# ./man/
# ./myData.R
# ./otherData.R

myData.R

#' My dataset
#' 
#' This is data I like.
#' 
#' @name myData
NULL

otherData.R:

#' My other dataset
#' 
#' This is another dataset I like
#' 
#' @name otherData
NULL

さて、すべてをまとめるコードです (もちろん、これを関数でラップすることもできます):

library(roxygen2)
mydir <- "path/to/your/data/directory/"
myfiles <- c("myData.R","otherData.R")

# get parsed source into roxygen-friendly format
env <- new.env(parent = globalenv())
rfiles <- sapply(myfiles, function(f) file.path(mydir,f))
blocks <- unlist(lapply(rfiles, roxygen2:::parse_file, env=env), recursive=FALSE)
parsed <- list(env=env, blocks=blocks)

# parse roxygen comments into rd files and output then into the "./man" directory
roc <- roxygen2:::rd_roclet()
results <- roxygen2:::roc_process(roc, parsed, mydir)
roxygen2:::roc_output(roc, results, mydir, options=list(wrap=FALSE), check = FALSE)

これで、空だったフォルダーに適切にフォーマットさmyData.Rdれたファイルが作成されます。otherData.Rdman

于 2014-08-13T16:19:44.817 に答える
0

パッケージparse_Rd内で呼び出される関数があります。tools.Rd ファイルを生成して実行parse_Rdし、出力をオブジェクトとしてモジュールの名前空間に保存できます。modHelp名前空間で適切な Rd オブジェクトを見つけて、Rd2text別のオブジェクトまたはカスタム ソリューションを使用して表示する新しい検索関数 (おそらく ) が必要になります。Rd2text が吐き出す基本的なテキスト ヘルプ以外のものが得られるかどうかはわかりませんが、可能性はあります。

于 2014-08-13T17:01:03.357 に答える
0

これが機能するハッキーなアプローチです。一時ディレクトリにダミー パッケージを作成し、それを使用してファイルを生成し、Rdファイルを抽出してRdクリーンアップします。以下のコードを参照してください。

お役に立てれば。

注: これが機能するためには、ファイル@exportを生成する関数にタグがあることを確認してください。Rd

makeRd <- function(rscript, dir.out){
  stopifnot(require(devtools))

  # Prepare paths
  pkg.path = tempdir()
  r.path = file.path(pkg.path, 'R')
  man.path = file.path(pkg.path, 'man')
  desc.path = file.path(pkg.path, 'DESCRIPTION')

  # Create directories
  dir.create(r.path, F)
  dir.create(man.path, F)

  # Write dummy description
  z = c('Package', 'Type', 'Title', 'Version', 'Date', 'Author', 'Maintainer', 'Description', 'Licence')
  writeLines(paste0(z, ': X'), desc.path)

  # Copy rscript file over to dummy package and generate rd files
  file.copy(rscript, r.path)
  suppressMessages( document(pkg.path) )

  # Copy generated Rd files to output directory
  f.in = list.files(man.path, full.names = T)
  f.out = file.path(dir.out, basename(f.in))
  for(i in 1:length(f.in)) file.copy(f.in[i], f.out[i], overwrite = T)

  # Unlink
  unlink(pkg.path, T, T)
  return(f.out)
}

# Example
rd = makeRd(rscript='foo.R', dir.out='~/Desktop')
print(rd)
# [1] "~/Desktop/myFunction.Rd"
于 2014-08-13T15:40:12.050 に答える
-4

私の答えは、分析をパッケージに入れてませんか?このようにして、パッケージに付属するすべてのサポートを取得できます。これには、ドキュメント (データおよび自己記述関数) や、データがどこにあるかを自動的に認識するビネット (および R 内からビネットを一覧表示できる) が含まれます。 -ヘルプ)。パッケージなしで、パッケージの機能が必要なだけです。代わりに、分析のためにパッケージ構造を採用し、データセットを文書化するなど、それを有利に使用してください。

パッケージはファイルを統合しないとコメントしていますRnwが、私はむしろあなたが間違っていると思います。パッケージのデフォルトの形式vignettesは、RnwまたはSweaveファイルです。パッケージの分析レポートを作成する方法として、ビネットを簡単に選択できます。

私は実際にこのアプローチを自分自身の分析で使用しており、いくつかのブログ投稿で文書化ます。私はまた、学術分析プロジェクト (ますます多くのことを行っているため、まだ例を示すことはできません) と個人的なプロジェクト (例: https://github.com/rmflight/timmysDensityhttp://rmflight ) の両方で使用しています。 .github.io/posts/2013/06/timmysDensity.html、データを見つけるためにパッケージメカニズムをまだ使用していないことに注意してください)。

ところで、データをパッケージに入れる以外に(データのみのパッケージがあり、Bioconductorroxygen2にはかなりの数があります)、生のタグを単に提供する以外に、あなたが求めていることを行う方法はないと思います.R ファイルは、データセットについて上記で概説したとおりです。

于 2014-08-13T15:21:53.383 に答える