2013-01-23 3 views
1

멋진 LaTeX 테이블을 생성하기 위해과 결합하여 prettyNum을 사용하고 있습니다. data.frame에 둘 이상의 행이있을 때 예상대로 작동합니다. 하지만 하나의 행만있는 경우 prettyNumdata.frame을 문자 벡터로 변환하기 때문에 실패합니다.prettyNum이 내 행 데이터 프레임을 문자 벡터로 변환하지 못하도록하는 방법

prettyNum에서 data.frame을 유지하려면 "drop = FALSE"과 비슷한 간단한 방법이 있습니까? xtable를 사용하기 전에 한 행 행렬에 출력을 변환하거나 prettyNum로 변환 apply를 사용할 수 있습니다

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

답변

0

사용할 수있는 두 가지 기본 옵션이 있습니다.

첫째, 일부 샘플 데이터 : 여기

는 최소 예이다. 한 행 data.frame와 세 개의 행 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 

xtable를 사용하여 3 행의 하나가 잘 작동 하지만 당신은 귀하의 질문에 명시된 것과는 달리, 그것은 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") 

는 일부 샘플 출력 :

enter image description here

+0

A가 늦게 포괄적 인 대답 아난다 주셔서 감사합니다. – Rickard

관련 문제