千位分隔符格式化(R语言)

3
我想在R中设置一个选项,以便使用千位分隔符显示所有数字。
我看到了许多文章都涉及到了formatformatC等函数,但是我需要每次调用函数。
formatC(1:10 * 100000, format="d", big.mark=",")

就像数字一样,IT技术问题也需要有解决方案。

options(digits = 5)

感谢您的选择。

1
我能想到的最简单的方法是在 print.default 中添加一个选项。 - Rich Scriven
2个回答

4
一个简单的解决方法是定义一个专门用于打印带千位分隔符的数字的函数,可以命名为printT():
printT <- function(x) {formatC(x, format="d", big.mark=",")}

例子:

printT(1:10 * 100000)
[1] "100,000"   "200,000"   "300,000"   "400,000"   "500,000"   "600,000"   "700,000"  
[8] "800,000"   "900,000"   "1,000,000"

3

如我在评论中所提到的,我能想到最简单的方法是将 print.default 的参数列表中添加一个 thousands 选项,并在函数主体中添加一个 if() 语句。

print.default <- function (x, digits = NULL, quote = TRUE, na.print = NULL, print.gap = NULL, 
                           right = FALSE, max = NULL, useSource = TRUE, thousands = TRUE, ...) 
{
    noOpt <- missing(digits) && missing(quote) && missing(na.print) && 
        missing(print.gap) && missing(right) && missing(max) && 
        missing(useSource) && missing(...)
    if(thousands) {
        return(formatC(x, format="d", big.mark=","))
    }
    .Internal(print.default(x, digits, quote, na.print, print.gap, 
                            right, max, useSource, noOpt))
}

现在我们需要用 print 包装一下,但它运行得很好。
print(1:10 * 100000)
# [1] "100,000"   "200,000"   "300,000"   "400,000"   "500,000"   "600,000"  
# [7] "700,000"   "800,000"   "900,000"   "1,000,000"
print(1:10 * 100000, thousands=FALSE)
# [1] 1e+05 2e+05 3e+05 4e+05 5e+05 6e+05 7e+05 8e+05 9e+05 1e+06

这真的很好。您认为是否可能单独设置和删除“千位分隔符”选项,而不是将其作为参数传递给print()?默认值肯定很有帮助,但我认为它可能会在其他情况下导致意外使用此选项。 - RHertel
1
根据Roland在此答案中的说法,我们需要在C级别重新编写代码才能更改数字(和字符)的默认打印方式。 - Rich Scriven
1
我明白了,谢谢。这可能不符合“容易实现”的条件 :-) - RHertel
谢谢Rich!至少这证实了这不是一个直截了当的解决方案。 - stuski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接