長い列名を持つ R データ フレームがあります。そのため、データ フレームを印刷すると幅が広すぎます。colnames が複数行に表示された状態で、データ フレームを画面に出力する簡単な方法はありますか?
名前を短縮できることはわかっていますが、短縮したくありません。
オスカーの回答が受け入れられたとき、私はそれが実際に回答だったのではないかと思いました。残念ながら、コードをコピーしformat.daa.frame
て「ここで不特定の魔法をかけてください」と言っただけでした。これは実際に何かを行うコードの一部ですが、当時は大雑把すぎて投稿できませんでした。マトリックスの行と列のヘッダーは引き続き出力されます。それを抑える方法がわかりません。マトリックス用のハッキングされた印刷方法が必要な場合がありますか?
dfrm <- data.frame(reallly_long.nameeeeeeeeeeeeeeeeeeeeeeee=letters[1:5],
secondreallly_long.nameeeeeeeeeeeeeeeeeeeeeeee=letters[1:5], short=2)
pdfrm <- function(dfrm) { # first print the names broken into sections
print( unname(t(sapply( 1:(max(nchar(names(dfrm))) %/% 12),
# first construct break points to be passed to `substr`
function(rr) sapply(names(dfrm),
substr, 1+(rr-1)*10, 9+(rr-1)*10) ) )) ,quote=FALSE,
# then print with sufficient gap
print.gap=8)
# Now print a headerless data.frame with wider spacing
print( setNames(dfrm, rep(" ", length(dfrm))), print.gap = 15 )}
pdfrm(dfrm)
#------------------------------
[,1] [,2] [,3]
[1,] reallly_l secondrea short
[2,] ng.nameee lly_long.
[3,] eeeeeeeee ameeeeeee
1 a a 2
2 b b 2
3 c c 2
4 d d 2
5 e e 2
format.data.frame
Rが「長い」名前を見つけたときの動作を変更して、カスタム関数を作成できます。
long <- nchar(cn, "bytes") > 256L
cn[long] <- paste(substr(cn[long], 1L, 250L), "...")
names(rval) <- cn
そして、データフレームはすべての前処理の後に行列として出力されるため、print.default
(実際にはジェネリックprint.default
) cat が行うようにエスケープ文字を処理することを期待しましょう (そのまま印刷し、印刷時に新しい行を取得します\n
)。
編集
実際には、print.default
印刷できない文字をエスケープします (cat オンライン ヘルプ ページ)
文字列は「そのまま」出力されます (印刷できない文字とバックスラッシュをエスケープする print.default とは異なります [...])
したがって、独自のメソッドの準備を開始する必要があります (R オブジェクトを $$\LaTeX$$ テーブルに変換するオプションも確認してください。オプションがある可能性があります)。