【问题标题】:R: Disabling Scientific NotationR:禁用科学记数法
【发布时间】:2021-05-01 11:58:41
【问题描述】:

我正在使用 R 编程语言。在一些更大的数据上,我尝试了以下代码(制作决策树):

#load library
library(rpart)
    
    #generate data
    a = rnorm(100, 7000000, 10)
    
    b = rnorm(100, 5000000, 5)
    
    c = rnorm(100, 400000, 10)
    
    group <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5,0.5) )
    
    group_1 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) )
    
    
    d = data.frame(a,b,c, group, group_1)
    d$group = as.factor(d$group)
    d$group_1 = as.factor(d$group_1)
    
#fit model
    tree <- rpart(group ~ ., d)
    
#visualize results
    plot(tree)
    
    text(tree, use.n=TRUE, minlength = 0, xpd=TRUE, cex=.8)

在视觉输出中,数字以科学计数法显示(例如 4.21e+06)。有没有办法禁用它?

我在stackoverflow上查阅了这个之前的答案:How to disable scientific notation?

然后我尝试了以下命令:options(scipen=999)

但这似乎并没有解决问题。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

标签: r data-visualization data-manipulation decision-tree


【解决方案1】:

我认为labels.rpart 函数具有硬编码的科学记数法:它使用名为formatg 的私有函数使用sprintf()%g 格式进行格式化,并且该函数忽略options(scipen)。您可以通过将formatg 替换为更好的函数来覆盖它。这是一种危险的方法:

oldformatg <- rpart:::formatg
assignInNamespace("formatg", format, "rpart")

formatg 替换为标准的format 函数。 (这肯定会产生危险的副作用,所以之后你应该使用

assignInNamespace("formatg", oldformatg, "rpart")

更好的解决方案是重新调整您的数据。 rpart 仅针对大数字切换到科学记数法,因此您可以将坏数字除以 1000 或 1000000 之类的数字,并将它们描述为不同的单位。对于您的示例,这对我有用:

library(rpart)

#generate data
set.seed(123)
a = rnorm(100, 7000000, 10)/1000

b = rnorm(100, 5000000, 5)/1000

c = rnorm(100, 400000, 10)/1000

group <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5,0.5) )

group_1 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) )


d = data.frame(a,b,c, group, group_1)
d$group = as.factor(d$group)
d$group_1 = as.factor(d$group_1)

#fit model
tree <- rpart(group ~ ., d)

#visualize results
plot(tree)

text(tree, use.n=TRUE, minlength = 0, xpd=TRUE, cex=.8)

reprex package (v0.3.0) 于 2021-01-27 创建

【讨论】:

  • 感谢您的回复!我正在阅读并试图理解您的答案。为什么将其描述为“危险的方式”?
  • 我不想把数字分开。有没有一种不危险的方式来压制科学记数法?感谢您的帮助
  • 修改不属于你的代码是危险的,因为它可能以你没有考虑到的方式使用。据我所知,只有 rpart 包的维护者可以安全地进行您想要的更改。 rpart 来源在这里:github.com/bethatkinson/rpart;您可以留言要求他们尊重scipen 设置。
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 2013-04-27
  • 2022-01-15
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多