R:禁用科学记数法
R: Disabling Scientific Notation
我正在使用 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)。有没有办法禁用它?
我参考了之前关于 Whosebug 的回答:How to disable scientific notation?
然后我尝试了以下命令:options(scipen=999)
但这似乎并没有解决问题。
有人可以告诉我我做错了什么吗?
谢谢
我认为 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 创建
我正在使用 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)。有没有办法禁用它?
我参考了之前关于 Whosebug 的回答:How to disable scientific notation?
然后我尝试了以下命令:options(scipen=999)
但这似乎并没有解决问题。
有人可以告诉我我做错了什么吗?
谢谢
我认为 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 创建