1

素敵な LaTeX テーブルを作成するためprettyNumに と組み合わせて使用​​しています。xtableに複数の行がある場合、期待どおりに機能しdata.frameます。しかし、行が 1 つしかない場合は、 を文字ベクトルにprettyNum変換するため失敗します。data.frame

fromdrop = FALSEを保持する" " に似た簡単な方法はありますか?data.frameprettyNum

df <- data.frame(a = 1, b ='a')
prettyDf <- prettyNum(df) 
class(prettyDf)
[1] "character"
4

1 に答える 1

0

使用できる基本的なオプションは2つあります。を使用する前に出力を1行の行列に変換するxtableか、を使用applyしてに変換することができますprettyNum

最小限の例を次に示します。

まず、いくつかのサンプルデータ。1行data.frameと3行data.frame

df <- structure(
  list(V1 = 76491283764.9743, V2 = 29.12345678901, V3 = -7.1234, V4 = -100.1, 
       V5 = 1123), .Names = c("V1", "V2", "V3", "V4", "V5"), 
  row.names = c(NA, -1L), class = "data.frame")
df
#            V1       V2      V3     V4   V5
# 1 76491283765 29.12346 -7.1234 -100.1 1123

df2 <- rbind(df, df*2, df*3)
df2
#             V1       V2       V3     V4   V5
# 1  76491283765 29.12346  -7.1234 -100.1 1123
# 2 152982567530 58.24691 -14.2468 -200.2 2246
# 3 229473851295 87.37037 -21.3702 -300.3 3369

xtable3行で使用すると問題なく動作しますが、質問で述べたものとは異なり、は保持されませんdata.frame。出力を文字行列に変換します。

> class(prettyNum(df2, big.mark=","))
[1] "matrix"

> xtable(prettyNum(df2, big.mark=","), align = "rrrrrr")
% latex table generated in R 2.15.3 by xtable 1.7-1 package
% Fri Mar 22 15:46:08 2013
\begin{table}[ht]
\centering
\begin{tabular}{rrrrrr}
  \hline
 & V1 & V2 & V3 & V4 & V5 \\ 
  \hline
1 &  76,491,283,765 &        29.12346 &         -7.1234 &          -100.1 &           1,123 \\ 
  2 & 152,982,567,530 &        58.24691 &        -14.2468 &          -200.2 &           2,246 \\ 
  3 & 229,473,851,295 &        87.37037 &        -21.3702 &          -300.3 &           3,369 \\ 
   \hline
\end{tabular}
\end{table}

1行のdata.frameで同じことを試みると、エラーが発生します。これは、数値を「きれいにする」プロセスで、すでに理解しているように、data.frameが名前付きの文字ベクトルになるためです。

> xtable(prettyNum(df, big.mark = ","), align = "rrrrrr")
Error in UseMethod("xtable") : 
  no applicable method for 'xtable' applied to an object of class "character"

メソッドが定義されているmethods(xtable)オブジェクトのタイプを確認するために使用します。xtable特定のメソッド(たとえば、メソッド)を表示するには、をxtable.data.frame使用しますxtable:::xtable.data.frame。そこから、必要に応じて独自のメソッドを作成する方法を学ぶことができます。

ただし、この場合は必要ありません。次のオプションのいずれかを試して、それらの微妙な違いに注意してください。

xtable(matrix(prettyNum(df, big.mark = ","), nrow = 1), align = "rrrrrr")
xtable(t(apply(df, 1, prettyNum, big.mark = ",")), align = "rrrrrr")

次に出力例を示します。

ここに画像の説明を入力してください

于 2013-03-22T10:24:32.197 に答える