270

我可以强制 R 使用常规数字而不是使用e+10-like 表示法吗?我有:

1.810032e+09
# and 
4

在同一个向量中并希望看到:

1810032000
# and
4

我正在为一个老式程序创建输出,我必须使用cat. 到目前为止效果很好,但我根本不能在e+10那里使用符号。

4

4 回答 4

266

这是一个灰色地带。你需要记住,R 总是会调用一个 print 方法,而这些 print 方法会监听一些选项。包括“scipen”——对科学展示的惩罚。来自help(options)

'scipen':整数。决定以固定或指数表示法打印数值时要应用的惩罚。正值偏向固定,负值偏向科学记数法:固定记数法将是首选,除非它比“scipen”数字更宽。

例子:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4)
R> ran2
[1] 1.81e+09 4.00e+00
R> options("scipen"=100, "digits"=4)
R> ran2
[1] 1810032000          4

话虽如此,我仍然觉得它值得做。最直接的方法是使用sprintf()显式宽度,例如sprintf("%.5f", ran2).

于 2012-02-22T15:33:21.647 回答
190

它可以通过禁用 R 中的科学记数法来实现。

options(scipen = 999)
于 2014-12-05T14:43:12.573 回答
119

我最喜欢的答案:

format(1810032000, scientific = FALSE)
# [1] "1810032000"

这可以提供您想要的东西,而无需在 R 设置中搞砸。

请注意,它返回的是字符串而不是数字对象

于 2017-12-21T21:02:12.713 回答
17

放入options(scipen = 999) 您的.Rprofile 文件,使其默认自动执行。(不要依赖手动操作。)

(这与其他答案不同:如何?

  1. 当您每天或每月在多个项目、多种语言之间切换时,这会让事情保持清醒。记住输入每个项目的设置很容易出错并且不可扩展。您可以拥有一个全局的 ~/.Rprofile 或每个项目的 .Rprofile。或两者兼而有之,后者压倒前者。
  2. 将所有配置保存在项目范围或全局 .Rprofile 中会自动执行它。这对于例如默认包加载、data.table 配置、环境等很有用。同样,该配置可以运行到设置页面,您记住这些及其语法并输入它们的可能性为零
于 2018-02-13T01:16:37.627 回答