如何使big.mark不仅仅适用于第一列?

时间:2016-01-05 15:18:06

标签: r pander

这是我得到的:

> panderOptions('big.mark', ',')
> foo <- rbind(cancer, cancer); for(i in 1:8) foo <- rbind(foo, foo)
> pander(table(foo$ph.karno, foo$pat.karno))

-----------------------------------------------------
 &nbsp;    30    40   50   60   70   80    90    100 
--------- ----- ---- ---- ---- ---- ----- ----- -----
 **50**     0   512  512  512  512   512    0     0  

 **60**     0   512  512  2560 4608 1536    0     0  

 **70**   1,024  0   1024 4608 3072 3072  1536  1536 

 **80**     0    0    0   6144 6656 6656  10240 4608 

 **90**     0    0    0   1536 5120 10752 12288 7680 

 **100**    0    0    0    0   512  3584  6656  4096 
-----------------------------------------------------

我希望逗号分隔符也显示在其他列中。我该怎么做?

1 个答案:

答案 0 :(得分:3)

我得到的最佳结果(t为您的table通话结果):

> pander(format(t,big.mark=','))

----------------------------------------------------------
 &nbsp;    30    40   50    60    70     80     90    100 
--------- ----- ---- ----- ----- ----- ------ ------ -----
 **50**     0   512   512   512   512   512     0      0  

 **60**     0   512   512  2,560 4,608 1,536    0      0  

 **70**   1,024  0   1,024 4,608 3,072 3,072  1,536  1,536

 **80**     0    0     0   6,144 6,656 6,656  10,240 4,608

 **90**     0    0     0   1,536 5,120 10,752 12,288 7,680

 **100**    0    0     0     0    512  3,584  6,656  4,096
----------------------------------------------------------

我认为这是pander.table.return中的一个错误,但我没有挖掘到足以解决根本原因。

编辑:我找到了原因,该函数的第283行用于在每个col上循环调用sapply,但是一旦处理完第一列,表的完整数组就会转换为char,因为我们从format的输出中引入了字符。

然后,对format的后续调用无法格式化数字,因为他们已被强制为字符。

来自pander.table.return的代码提供此行为:

for (j in 1:ncol(t)) {
  temp.t[, j] <- sapply(temp.t[, j], format, trim = TRUE, 
                        digits = digits[j], decimal.mark = decimal.mark, 
                        big.mark = big.mark)
}