强制R不使用指数表示法(例如e + 10)?

Mat*_*ert 206 r scientific-notation options number-formatting defaults

我可以强制R使用常规数字而不是使用e+10类似符号吗?我有:

1.810032e+09
# and 
4
Run Code Online (Sandbox Code Playgroud)

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

1810032000
# and
4
Run Code Online (Sandbox Code Playgroud)

我正在为一个老式程序创建输出,我必须使用编写一个文本文件cat.到目前为止工作正常,但我根本无法使用e+10那里的符号.

Dir*_*tel 204

这有点灰色.您需要记住R将始终调用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
Run Code Online (Sandbox Code Playgroud)

也就是说,我仍觉得它很吵.最可怕的方法是使用sprintf()显式宽度.

  • @CSA:`options("scipen"= 0,"digits"= 7)`(这些是默认值) (5认同)
  • 在rstudio中,如果导入数据集并执行train_sample_10k = format(train_sample_10k,scientific = FALSE)并重新加载,则会更改科学记数法. (4认同)

Gin*_*ack 140

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

options(scipen = 999)
Run Code Online (Sandbox Code Playgroud)

  • 此外,这可以放在[.Rprofile文件](https://csgillespie.github.io/efficientR/3-3-r-startup.html#rprofile)中,默认情况下会自动执行. (4认同)

Dan*_*nny 61

我最喜欢的答案:

format(1810032000, scientific = FALSE)
# [1] "1810032000"
Run Code Online (Sandbox Code Playgroud)

这给了你想要的东西,而不必在R设置中捣乱.

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

  • 也许值得注意的是,这会创造一个角色而不是数字. (9认同)
  • 嗯,这很奇怪,它对我不起作用。我没有收到错误,它只是仍然打印科学记数法。 (2认同)
  • 如果向量中的数字是不同的长度,请确保使用`justified ="none"`或者将空格填充为相同的长度. (2认同)

smc*_*mci 15

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

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

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