2017-10-13 59 views
0

有沒有人想出一個解決方案來調整knitr文檔中顯示的圓整R值,或者沿着\Sexpr{}或通過xtable?打字?round返回Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ‘go to the even digit’固定圓形R值在xtable在knitr

當使用xtable顯示來自數據框的計算數字時,我的問題是以下情況。如果在一個單獨的列分別顯示在表中的值,讀出器會假設有一個計算誤差:

2.5 + 3.1 = 5.6

將顯示爲

2 + 3 = 6

當R舍入數字(我已將有效數字設置爲0,因爲觀衆不需要更多細節)。無論顯示多少個小數位,這種情況都可能發生(我想避免顯示任何!)。

我使用以下內嵌表達式,但我很少在段落中插入一個數字,它通常不會顯示爲計算。對於小於10且大於-10的數字,這將顯示1位小數位,並且應該以偶數以0.5結尾。

number_hook <- function(x) { 
    if (is.numeric(x)) { 
    if (x < 10 & x > 0 | x < 0 & x > -10) { 
     y = prettyNum(x, 
        small.mark = ".", 
        digits = 2) 
     return(y) 

    } else if (sign(x) == 1) { 
     y = x + 0.5 
     y = trunc(y) 
     y = prettyNum(y, big.mark = ",", small.mark = ".", digits = 0) 
     return(y) 

    } else if (sign(x) == -1) { 
     y = x - 0.5 
     y = trunc(y) 
     y = prettyNum(y, big.mark = ",", small.mark = ".", digits = 0) 
     return(y) 
    } 

    } else { 
    x 
    } 
} 

任何幫助,解決方法,或建議表示讚賞!謝謝!

我也訪問了this similar question

+0

你能詳細說明你是如何使用xtable的嗎?你能否在創建一個xtable對象之前不應用「number_hook」之類的東西? – detroyejr

+0

@ jonathande4我原本是想通過一個函數來運行每個數據框,然後把數據放在xtable中... – Prevost

+0

假設你的原始函數按照預期工作,你可以使用類似於: 'xtable: :xtable(dplyr :: mutate_if(iris,is.numeric,number_hook))' xtable也有一個你可以使用的數字參數。這是否讓你得到你所需要的? – detroyejr

回答

1

我原來的建議沒有正常工作。首先你應該修改你的原始功能。

number_hook <- function(x) { 
    ifelse(abs(x) < 10 & abs(x) > 0, prettyNum(x, small.mark = ",", digits = 2), trunc(x)) 
} 

這應該簡化if語句的數量。然後您可以使用:

xtable::xtable(dplyr::mutate_if(iris, is.numeric, number_hook)) 

將函數應用於數據框中的每個數字列。

試試它:

foo <- data.frame(a = rnorm(10), b = rnorm(10, 10), c = rnorm(10, -10)) 
xtable::xtable(dplyr::mutate_if(foo, is.numeric, number_hook)) 

,你應該得到你需要的值。

+0

我會在我的下一個項目中嘗試一下,讓你知道!感謝您輸入number_hook mod。 – Prevost

+0

將舍入標準調整爲偶數時會很有用......當第三方檢查我的作品時(PDF格式),他們查看錶格並認爲我的數學關閉,因爲十進制數字無效!其實我認爲這個帖子有助於https://stackoverflow.com/questions/23158165/truncate-decimal-to-specified-places ... – Prevost