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

How do I make big.mark apply to more than just the first column?

这是我得到的:

> 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 
-----------------------------------------------------

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

我得到的最好结果(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 行有一个 for 循环在每个列上调用 sapply,但是一旦处理完第一列,table 的完整数组当我们从 format 的输出中引入字符时,将转换为字符。

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

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)
}