2017-08-04 125 views
3

CODE:knitr的kable正在打印2.29e-30爲 「0」

# some data 
dat <- 
    data.frame(
    log2fc = c(0.28, 10.82, 8.54, 5.64, 8.79, 6.46), 
    pvalue = c(0.00e+00, 2.29e-30, 7.02e-30, 4.14e-29, 1.86e-28, 1.78e-27) 
) 

# observe in markdown format 
knitr::kable(dat, format="markdown") 

OUTPUT:

| log2fc| pvalue| 
|------:|------:| 
| 0.28|  0| 
| 10.82|  0| 
| 8.54|  0| 
| 5.64|  0| 
| 8.79|  0| 
| 6.46|  0| 

問題:

與問題輸出是,它正在渲染最後一列pvalue作爲零。但我想保留與我在數據框中看到的相同的格式。我怎麼做 ?我已經嘗試了幾種不同線程的解決方案,但似乎沒有任何效果。有人能指引我走向正確的方向嗎?

請不要建議我將pvalue列轉換爲字符向量。這是一個快速和骯髒的解決方案,但我不想這樣做,因爲:

  1. 我不想亂搞我的數據框。
  2. 我對最後一列的科學格式爲什麼在markdown打印時未被保留的原因感興趣。
  3. 我有許多表格,每個都有各種科學格式的列,我正在尋找一種能夠自動處理這個問題的方法。

回答

4

kable()調用基礎R功能round(),除非你設置數字到一個真正的大值截斷那些較小的值爲零。但是你可以做到這一點,例如

knitr::kable(dat, format = "markdown", digits = 32) 

這給

| log2fc| pvalue| 
|------:|--------:| 
| 0.28| 0.00e+00| 
| 10.82| 2.29e-30| 
| 8.54| 7.02e-30| 
| 5.64| 4.14e-29| 
| 8.79| 1.86e-28| 
| 6.46| 1.78e-27| 

如果你想在一些列的常規舍入,你可以指定數字,例如多個值

knitr::kable(dat, format = "markdown", digits = c(1, 32)) 


| log2fc| pvalue| 
|------:|--------:| 
| 0.3| 0.00e+00| 
| 10.8| 2.29e-30| 
| 8.5| 7.02e-30| 
| 5.6| 4.14e-29| 
| 8.8| 1.86e-28| 
| 6.5| 1.78e-27| 
+0

謝謝!它完美的作品。 :) –