首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数字向量转换为科学格式,而不改变R中的模式

将数字向量转换为科学格式,而不改变R中的模式
EN

Stack Overflow用户
提问于 2020-05-16 15:40:36
回答 2查看 161关注 0票数 1

我希望将数字向量转换成科学格式,而不将其模式更改为字符。解决方案herehere将模式更改为字符。我尝试了以下几点:

代码语言:javascript
运行
复制
x <- c(1.0004, 2.2223,4, 509703045845, 0.0002)
mode(x)
#first attempt
x1 <- formatC(x, format = "e")
mode(x1)
as.numeric(x1)

#second attempt
x2 <- format(x, scientific = TRUE)
mode(x2)
as.numeric(x2)

转换为数字不保留科学显示。我想要一个解决方案,改变显示为科学,但保留数字模式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-16 16:25:38

FormatFormatC用于获得所需形状的字符。你的数字显示不会受到影响。此外,转换到字符那里和返回数字将偏见你的数字!考虑使用first of your linked solutions options()$scipen,这实际上是将数字显示改为R的唯一选项,scipen来自_sci_entific和_pen_alty,参见?options

代码语言:javascript
运行
复制
x <- c(1.0004, 2.2223,4, 509703045845, 0.0002)

getOption("scipen")  ## displays defaults
# [1] 5
x
# [1] 1.00040e+00 2.22230e+00 4.00000e+00 5.09703e+11 2.00000e-04
as.numeric(format(x, scientific = TRUE))  ## convert there and back
# [1] 1.00040e+00 2.22230e+00 4.00000e+00 5.09703e+11 2.00000e-04

两者都是一样的。

但是:

代码语言:javascript
运行
复制
os <- options(scipen=50)  ## set scipen and store old scipen
x
# [1]         1.0004          2.2223       4.0000     509703045845.0000    0.0002
as.numeric(format(x, scientific = TRUE))  ## convert there and back
# [1]         1.0004          2.2223       4.0000     509703045845.0000    0.0002

所以实际上什么都没有发生,在那里和后面的转换是1。是一个错误的解决方案,

代码语言:javascript
运行
复制
options(os)  ## restore old scipen

2.将对数字进行偏置,如下所示:

代码语言:javascript
运行
复制
all.equal(x, as.numeric(format(x, scientific = TRUE)))
# [1] "Mean relative difference: 0.00000008994453"

注意:重新启动R时, options重置为存储在Rprofile.site中的默认值,因此不要惊慌;)

票数 1
EN

Stack Overflow用户

发布于 2020-05-16 15:51:45

在某些包中可能有这样的函数,但是为什么不直接编写自己的简单函数呢?

代码语言:javascript
运行
复制
to_scientific <- function(x){
  x <- format(x, scientific = TRUE)
  as.numeric(x)
}
to_scientific(x)
# [1] 1.00040e+00 2.22230e+00 4.00000e+00 5.09703e+11 2.00000e-04
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61839350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档