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


228

我可以强迫R使用正数而不是使用e+10-like表示法吗?我有:

1.810032e+09
# and 
4

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

1810032000
# and
4

我正在为老式程序创建输出,我必须使用编写文本文件cat。到目前为止,该功能还不错,但我根本无法在e+10此处使用该表示法。


Answers:


228

这是一个灰色区域。您需要回想一下,R总是会调用一个打印方法,而这些打印方法会监听某些选项。包括“科学”-科学展示的惩罚。来自help(options)

'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)


1
谢谢。科学似乎是我一直在寻找的选择。怪异的刑罚解释使我回避。但是您的示例很好地说明了这一点。sprintf,是吗?您是指一个星期前我与sprintf的麻烦吗?:)
马特·班纳特

4
在rstudio中,如果导入数据集并进行train_sample_10k = format(train_sample_10k,scientific = FALSE)并重新加载,它将更改科学计数法。
mixdev 2014年

完成此操作后,如何使事情恢复正常?
AIM_BLB

6
@CSA :(options("scipen"=0, "digits"=7)这些是默认值)
Scarabee

您应该将获得结果options("scipen"=100, "digits"=4)的代码移到代码的顶部,将不在代码下面的代码移到代码的顶部,并带有适当的注释。这可能会使正在寻求快速解决方案的人感到困惑(而Google会显示第一个解决方案)。
xbsd


74

我最喜欢的答案:

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

这样就可以提供您想要的内容,而不必在R设置中费解。

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


1
嗯,这很奇怪,对我不起作用。我没有收到错误,它仍然会打印科学符号。
Ovi)

不知道有什么问题。我签入了非常旧的(3.1.0)和新的(3.4.3)版本的R,它对我都适用。很有可能是某个地方的其他设置优先,或者您在R中发现了特定于版本的错误或边缘错误。是否有可能以科学计数形式而不是数字对象的形式来提供它?那就可以解释了。
丹尼

10
也许值得注意的是,它创建了一个字符而不是数字。
cengel

3
如果向量中的数字长度不同,请确保使用justified = "none",否则将空格填充到相同的长度。
劳伦·菲奇

1
format(1e6, scientific=FALSE)return "1000000"而return 则as.character(1e6)返回"1e+06",因此这两种方法之间存在差异。
米奇

7

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

(这是与其他答案不同的说法:如何?

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

为什么答案完全相同?stackoverflow.com/a/27318351/680068除了Rprofile位之外,也许最好编辑GingerJack的答案?
zx8754

@ zx8754:答案并不完全相同:关键是将这些内容移到您的.Rprofile中。然后,您将永远不会忘记它。而且,随着时间的流逝,您的.Rprofile会累积所有自定义项。
smci

1
当然由您决定,但是问的不是“我怎么不能忘记做X”,而是“我怎么做X”。
zx8754

@ zx8754:我每天都在多个项目中在R和Python / pandas之间穿梭。两者都具有自定义项,程序包路径等。使用一个通用的配置文件存储它们确实使事情保持理智。跨项目。
smci

1
@ zx8754:当您使用多种语言处理多个项目时,“如何做X”与“如何不能忘记做X”的问题以可伸缩,一致,自动的方式合并在一起。我只是添加了更多的解释。对于谁是过道低调的人。
smci
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.