强制 R 不使用指数符号(例如 e+10)?
Posted
技术标签:
【中文标题】强制 R 不使用指数符号(例如 e+10)?【英文标题】:Force R not to use exponential notation (e.g. e+10)? 【发布时间】:2012-02-22 15:24:33 【问题描述】:我可以强制 R 使用常规数字而不是使用类似 e+10
的符号吗?我有:
1.810032e+09
# and
4
在同一个向量内想看:
1810032000
# and
4
我正在为一个老式程序创建输出,我必须使用cat
编写一个文本文件。
到目前为止效果很好,但我根本不能在那里使用e+10
表示法。
【问题讨论】:
相关:***.com/q/3978266/134830 【参考方案1】:这是一个灰色地带。你需要记住,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)
.
【讨论】:
谢谢。 scipen 似乎是我正在寻找的选项。令人毛骨悚然的惩罚解释让我回避了。但是你的例子很好地解释了它。 sprintf,嗯?你是指一周前我用 sprintf 遇到的麻烦吗? :) 在 rstudio 中,如果您导入数据集并执行 train_sample_10k = format(train_sample_10k,scientific=FALSE) 并重新加载,它将改变科学记数法。 完成此操作后如何恢复正常? @CSA:options("scipen"=0, "digits"=7)
(这些是默认值)
您应该将达到结果options("scipen"=100, "digits"=4)
的那个移到代码的顶部,而没有低于它的那个......并带有适当的注释。寻找快速解决方案的人可能会感到困惑(Google 会显示第一个作为结果)。【参考方案2】:
可以通过禁用R中的科学记数法来实现。
options(scipen = 999)
【讨论】:
此外,这可以放在您的.Rprofile file 中,因此默认情况下会自动执行。【参考方案3】:我最喜欢的答案:
format(1810032000, scientific = FALSE)
# [1] "1810032000"
这可以提供您想要的东西,而无需在 R 设置中搞砸。
注意它返回的是字符串而不是数字对象
【讨论】:
嗯,这很奇怪,它对我不起作用。我没有收到错误,它仍然会打印科学符号。 不确定是什么问题。我签入了一个非常旧的(3.1.0)和新的(3.4.3)版本的 R,它对我来说都适用。很可能某处的其他设置优先,或者您在 R 中发现了特定于版本或边缘情况的错误。您是否有可能以科学记数法而不是数字对象向它提供字符串?这样就可以解释了。 也许值得注意的是,这会创建一个字符而不是数字。 如果向量中的数字长度不同,请务必使用justified = "none"
,否则会有空格将它们填充到相同的长度。
format(1e6, scientific=FALSE)
返回"1000000"
而as.character(1e6)
返回"1e+06"
,所以这两种方法是有区别的。【参考方案4】:
将options(scipen = 999)
放入您的.Rprofile file,以便默认自动执行。 (不要依赖手动操作。)
(这与其他答案不同:如何?
-
当您每天或每月在多个项目、多种语言之间切换时,这会让事情保持清醒。记住输入每个项目的设置很容易出错并且不可扩展。您可以拥有一个全局的 ~/.Rprofile 或每个项目的 .Rprofile。或两者兼而有之,后者覆盖前者。
将所有配置保存在项目范围或全局 .Rprofile 中会自动执行它。这对例如有用默认包加载、data.table 配置、环境等。同样,该配置可以运行到设置页面,您记住这些及其语法并输入它们的可能性为零
【讨论】:
为什么答案完全一样? ***.com/a/27318351/680068 除了 Rprofile 位,也许更好地编辑 GingerJack 的答案? @zx8754:答案并不完全相同:关键是将这些东西移到你的 .Rprofile 中。那么你永远不会忘记它。此外,随着时间的推移,您的 .Rprofile 会累积您的所有自定义设置。 当然由你决定,但 Q 不是“我怎样才能不忘记做 X”,而是“我怎样才能做 X”。 @zx8754:我每天在多个项目中在 R 和 Python/pandas 之间切换。两者都有自定义、包路径等。拥有一个通用的配置文件来存储它们确实让事情变得理智。跨项目。 @zx8754:当您在跨多种语言处理多个项目时,“我如何做 X”这个问题与“我如何才能不忘记做 X”合并,以可扩展、一致的方式,自动方式。我只是添加了更多解释。无论谁是开车投票的人。以上是关于强制 R 不使用指数符号(例如 e+10)?的主要内容,如果未能解决你的问题,请参考以下文章