2011-09-29 42 views
3

一個data.frame的xtable:創建包含我想使用xtable顯示包含兩個向量與邏輯值的簡單數據幀邏輯值

ia = c(TRUE, TRUE, FALSE) 
ib = c(FALSE, TRUE, TRUE) 
i.df = data.frame(ia, ib) 
xtable(i.df) 

這產生:

\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rll} 
    \hline 
& ia & ib \\ 
    \hline 
1 & c(TRUE, TRUE, FALSE) & c(FALSE, TRUE, TRUE) \\ 
    2 & c(FALSE, TRUE, TRUE) & c(TRUE, TRUE, FALSE) \\ 
    3 & c(TRUE, TRUE, FALSE) & c(FALSE, TRUE, TRUE) \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

然而,我會期待:

\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rll} 
    \hline 
& ia & ib \\ 
    \hline 
1 & TRUE & FALSE \\ 
    2 & TRUE & TRUE \\ 
    3 & FALSE & FALSE \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

由於某些原因,xtable打印每行中的完整邏輯向量,在而不是每行只打印一個元素。這對任何人都有意義嗎?還是我忽略了明顯的東西?

回答

3

這對我來說就像一個錯誤。在xtable.data.frame相關的線路有:

logicals <- unlist(lapply(x, is.logical)) 
x[, logicals] <- as.character(x[, logicals]) 

這不是我怎麼會做,強迫性格。我可能會做更類似的東西:

x[,logicals] <- lapply(x[,logicals],as.character) 

我會考慮聯繫軟件包的作者。與此同時,您可以嘗試先將自己的邏輯列轉換爲字符,因爲這可能會在此期間解決問題。

編輯

低於羅馬的評論提醒我的事實,我的建議的修復不會,如果只有一個邏輯列,工作,因爲尺寸默認情況下刪除。它應該是:

x[,logicals] <- lapply(x[,logicals,drop = FALSE],as.character) 

我已經聯繫了包裹維護者關於此(2012-04-22)。

+1

非常感謝!使用'i.df $ ia = as.character(i.df $ ia)'轉換爲字符'可以很好地解決問題。我還發送了一封電子郵件的封裝作者。 – severin

+0

@severin,我猜這個問題還沒有解決呢? –

+0

也幫助了我!乾杯。 – Gerit