修复 knitr 中 xtable 中的舍入 R 值
Fixing rounded R values in xtable in knitr
有没有人想出一个解决方案来调整 knitr 文档中显示的舍入 R 值,无论是 \Sexpr{}
还是通过 xtable
?输入?round
returns Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ‘go to the even digit’
.
我的问题是在使用 xtable 显示数据框中的计算数字时出现以下情况。如果每个值都显示在 table 中的单独列中,reader 将假定存在计算错误:
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.
我原来的推荐没有正常工作。首先你应该修改你原来的功能。
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))
你应该得到你需要的值。
有没有人想出一个解决方案来调整 knitr 文档中显示的舍入 R 值,无论是 \Sexpr{}
还是通过 xtable
?输入?round
returns Note that for rounding off a 5, the IEC 60559 standard is expected to be used, ‘go to the even digit’
.
我的问题是在使用 xtable 显示数据框中的计算数字时出现以下情况。如果每个值都显示在 table 中的单独列中,reader 将假定存在计算错误:
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.
我原来的推荐没有正常工作。首先你应该修改你原来的功能。
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))
你应该得到你需要的值。