【问题标题】:How can I paste 100000 without it being shortened to 1e+05? [duplicate]如何粘贴 100000 而不会缩短为 1e+05? [复制]
【发布时间】:2012-11-14 19:42:48
【问题描述】:

问题:我如何使用paste 而不将100000 变为1e+05

如果这个问题看起来很无聊(但它导致了我的代码中的错误),请提前抱歉。我使用 R 来调用外部脚本,所以当我说例如paste("abc",100000) 我希望它输出 "abc 100000" 而不是 "abc 1e+05"

这是我屏幕上的示例:

> paste("abc",100000)
[1] "abc 1e+05"
> paste("abc",100001)
[1] "abc 100001"

这导致我的脚本适用于输入“100001”但不适用于“100000”的奇怪行为。

我意识到我可以创建一个脚本来将数字转换为字符串,但是我觉得如果有内部方法可以做同样的事情,我不应该这样做(我怀疑有一些“方法”我'米不见了)。

[如果有帮助,我在 Ubuntu 12.04.1 LTS(“精确”)上,在终端中运行 R 版本 2.14.1(2011-12-22)。]

【问题讨论】:

    标签: r r-faq


    【解决方案1】:

    ?options,尤其是scipen

    R> paste("abc", 100000)
    [1] "abc 1e+05"
    R> options("scipen"=10)    # set high penalty for scientific display
    R> paste("abc", 100000)
    [1] "abc 100000"
    R> 
    

    或者,通过sprintf() 以老式方式严格控制格式:

    R> sprintf("%s %6d", "abc", 100000)
    [1] "abc 100000"
    R> 
    

    【讨论】:

    • 或者把“100000”也放在引号里……
    【解决方案2】:

    或者,您可以使用不以科学计数法打印的整数。你可以指定你的数字是一个整数,方法是在它后面加上一个“L”,或者做 as.integer。

    > paste("abc",100000L)
    [1] "abc 100000"
    > paste("abc",as.integer(1000000000))
    [1] "abc 1000000000"
    

    【讨论】:

      【解决方案3】:

      或者format 可能比sprintf 更简单,尤其是当您想要更改小数的显示方式时:

      > paste("abc",format(100000, scientific = FALSE))
      [1] "abc 100000"
      > paste("abc",format(0.1234567, scientific = FALSE, digits = 4))
      [1] "abc 0.1235"
      

      【讨论】:

        猜你喜欢
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        相关资源
        最近更新 更多