Rの「コメント」機能の良い使用法は何ですか?


35

commentRで関数を発見しました。例:

x <- matrix(1:12, 3,4)
comment(x) <- c("This is my very important data from experiment #0234",
                "Jun 5, 1998")
x
comment(x)

この機能を使用したのはこれが初めてであり、この機能の一般的/有用な使用法について疑問に思っていました。グーグルで「Rコメント」を検索して関連する結果を見つけることは非常に難しいので、ここの誰かが彼の経験と共有することを望んでいました。


3
この質問は本当にCWである必要はないと思います。境界線ですが、それほど悪くはありません。
-csgillespie

素晴らしい情報!(時系列パッケージ 'xts'には、このメタデータ機能が似ています。)
doug

2
この質問は締めくくりに提案されています:質問が広く解釈されている場合(そして回答のほとんどがR固有ではないことに注意してください)、これは実際にデータの列にラベルを付けるタイミングと理由に関する質問です。この種のデータ管理の問題は、明らかに統計的な慣行の通常の部分であるため、ここではほぼ間違いなく話題になっています。
シルバーフィッシュ

回答:


15

2番目の@Gavinに、フランクハレルはHmiscパッケージでRの注釈付きdata.frameを処理する効率的な方法を開発しました。たとえば、label()およびunits()関数を使用すると、Rオブジェクトに専用の属性を追加できます。data.frameの概要を作成する場合(たとえば、describe())に非常に便利です。

このような追加属性を使用する別の便利な方法は、データセットにタイムスタンプを適用することです。また、ランダムシード、フォールドナンバーなどの属性を追加します(k-koldまたはLOOクロス検証を使用する場合)。


14

特定のデータ分析タスクのためにRスクリプトでよく行うことの1つは、データフレームの変数の単位に関するコメントをスクリプトに含めることです。私は環境データを使用しており、化学者と生態学者は同じことに対して広範囲の異なるユニットを使用することを楽しんでいるようです(mg L 1 vs mu eq L 1など)。私の同僚は通常、この情報をExcelシートの列名のすぐ下の行に保存します。11

comment()今後の参考のために、この情報をデータフレームに添付する良い方法だと思います。


2
標準的な解決策は、すべての数値結果を共通の(パラメーター固有の)単位に変換するようにコンピューターをプログラムできるように、測定単位のフィールドを含めることです。この重要な情報をコメントで埋めると、この機能の実装が困難または不可能になります。
whuber

2
@whuberですが、Rのベースオブジェクトにはそのような構造がなく、ユニット情報を運ぶデータフレームを再現するS4メソッドのスタック全体を書きたくありません。comment()コード内のコメントではないことに注意してください。オブジェクトに特定の属性を付加します。これは、単位情報を含むデータフレームの列ごとに1つの要素であるベクトルにすることができます。この情報を抽出するのは簡単なので、何を実装するのが難しいか不可能なのかわかりませんか?
モニカを回復-G.シンプソン

1
ギャビン、もっと簡単なものを提案してます。たとえば、セレン濃度がmg / Lで記録される場合とmeq / Lで記録される場合、後者のすべてのインスタンスを簡単に選択し、濃度に適切な係数を掛けてmg / Lに変換できます。ただし、これはあなたの異論の原因かもしれませんが、データベースを維持し、このタイプのプロセスを実行するのに適切な場所でRはありませ。このような作業には、優れたデータベース管理システムが最適です。
whuber

4
それにアーメン!comment()その他はアドホックなメモや情報には便利ですが、大規模なデータ処理には適切なシステムが必要です。興味深いことに、化学データに関して私が働いている研究グループとコンサルタント会社でこれに対処する必要があり、それを適切なデータベースに入れる必要があります。
モニカの復活-G.シンプソン

8

Stataの-notes-コマンドなど、他のパッケージにも同様の機能があります。これを使用して、変数の完全な詳細、たとえば生化学的測定のアッセイの詳細、または質問票データを求められた質問の正確な表現を文書化します。多くの場合、これは変数名またはラベルにとって情報が多すぎるため、その一方または両方が変数に関連するすべての分析の出力に表示されるため、合理的に短く保つのが最善です。


4

私がよくやっていることの1つは、データとオブジェクトを生成するために使用されるコマンドを追跡し、コメントがこのための便利なツールであることを発見したことです。

「matched.call.data」と「generate.command.string」がトリックを行います。完璧ではありませんが、有用であり、「comment()」を使用します。:)

# Comments only accept strings...
# Substituting the escaped quotes ('\"') makes it prettier.
generate.command.string <- function( matched.call.data )
{
  command.string <- as.character( bquote( .( list( matched.call.data ) ) ) )
  sapply( bquote( .(command.string) ),
                  USE.NAMES=FALSE,
                  function( x )
                    gsub( "\\\"", "\'", as.list( match.call() )$x )[[2]] )
}

# Some generating function...
generate.matrix <- function( nrows, ncols, data=NA ) {
  # Some generated object
  mat <- matrix( data= data, nrow= nrows, ncol= ncols )

  matched.call.data <- do.call( "call",
                                c( list( as.character( match.call()[[1]] ) ),
                                lapply( as.list( match.call() )[-1], eval ) ) )
  comment( mat ) <- c( Generated= date(),
                       Command = generate.command.string( matched.call.data ) )

  mat
}

# Generate an object with a missing argument.
emptyMat <- generate.matrix( nrows=2, ncols=2 )
comment( emptyMat )

# Generate without formally stating arguments.
dataMat <- generate.matrix( 2, 2, sample(1:4, 4, replace= TRUE ) )
comment( dataMat )

# And with a longer command.
charMat <- generate.matrix( 3, 3,
                  c( 'This', 'is', 'a', 'much', 'longer',
                     'argument', 'section', 'that', 'wraps') )
comment( charMat )

# And with a variable.
myData <- c( 'An', 'expanded', 'command', 'argument')
charMat2 <- generate.matrix( 2, 2, myData )
comment( charMat2 )

# Create a new object from an original command.
Sys.sleep(1)
emptyMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )
dataMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )

# Check equality of the static matrices.
identical( emptyMat, emptyMat2 )

# The generation dates are different.
all.equal( emptyMat, emptyMat2, check.attributes= FALSE )
comment( emptyMat )['Generated'] <- NA
comment( emptyMat2 )['Generated'] <- NA
identical( emptyMat, emptyMat2 )

# Command argument structure still works too.
str( as.list( match.call(
  generate.matrix, parse( text=comment( charMat2 )[[ 'Command' ]] ) ) )[-1] )

2

Rのオブジェクト管理に対する私の一般的な解決策を提案させてください:repoパッケージ。これを使用して、各変数に長い名前、説明、一連のタグ、リモートURL、依存関係を割り当てたり、図または一般的な外部ファイルを添付したりできます。たとえば、ソースコードをリポジトリアイテムとして保存し、それによって生成されたリソースに添付できます。CRAN(install.packages("repo"))で最新の安定版リリースを見つけるか、githubで最新の開発版を見つけてください。ここで簡単な概要。それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.