手始めに:私は今までにこの問題について何時間も検索しました-それで答えが些細なものであるならば、私を許してください...
私がやりたいのは、data.frameから行(101番)を削除することです。これにはテストデータが含まれているため、私の分析には表示されません。私の問題は次のとおりです。data.frameからサブセット化するたびに、属性(特にコメント)が失われます。
str(x)
# x has comments for each variable
x <- x[1:100,]
str(x)
# now x has lost all comments
サブセット化によってすべての属性が削除されることは十分に文書化されています-これまでのところ、それは完全に明らかです。マニュアル(例:http ://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.data.frame.html )は、属性を保持する方法を提案しています。
## keeping special attributes: use a class with a
## "as.data.frame" and "[" method:
as.data.frame.avector <- as.data.frame.vector
`[.avector` <- function(x,i,...) {
r <- NextMethod("[")
mostattributes(r) <- attributes(x)
r
}
d <- data.frame(i= 0:7, f= gl(2,4),
u= structure(11:18, unit = "kg", class="avector"))
str(d[2:4, -1]) # 'u' keeps its "unit"
ここで正確に何が起こっているのかを理解するために、私はまだRにまだ詳しくありません。ただし、これらの行(最後の3行を除く)を実行するだけでは、サブセット化の動作は変わりません。適切なベクトル(100倍のTRUE + 1 FALSE)でコマンドsubset()を使用すると、同じ結果が得られます。また、属性を変数に格納し、サブセットの後でそれを復元するだけでも機能しません。
# Does not work...
tmp <- attributes(x)
x <- x[1:100,]
attributes(x) <- tmp
もちろん、すべてのコメントをベクター(var => comment)に書き込み、サブセット化して、ループを使用して書き戻すことはできますが、それは十分に根拠のある解決策ではないようです。そして、将来の分析で他の関連する属性を持つデータセットに遭遇することは間違いありません。
だから、これはスタックオーバーフロー、グーグル、そして頭脳の力での私の努力が行き詰まったところです。誰かがヒントを手伝ってくれたらとてもありがたいです。ありがとう!