如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?

Posted

技术标签:

【中文标题】如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?【英文标题】:How can I change plotted numbers from scientific notation to standard form in an rpart regression tree plot? 【发布时间】:2020-12-04 00:00:37 【问题描述】:

我正在使用rpart.plot 包来绘制回归树。如何将树底部的数字从科学记数法转换为标准形式?比如我想把14e+3改成14000

这是我正在使用的代码:

library(rpart.plot)
rpart.plot(tm1, type=5, digits = 2, fallen.leaves = T)

结果如下:

【问题讨论】:

如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 我附上了回归树图。我希望这会有所帮助 这不允许我们运行和测试代码以寻找可能的解决方案。 可能是这样的:***.com/questions/5963047/… options(scipen=999) 能解决问题吗? 【参考方案1】:

这是一个棘手的问题,因为包作者决定用科学记数法进行硬编码。

如果我们查看source code,有一个 函数rpart.plot:::format0 格式化0.0019999 之间的任何值。

因此,一种方法是创建一个覆盖这些默认值的副本并将其分配到 rpart.plot 命名空间。

首先,一个示例树:

library(nycflights13)
library(rpart.plot)
fit <- rpart(carrier ~ origin + distance, data = flights[flights$carrier %in% c("UA","AA","DL"),])
rpart.plot(fit, type = 5, digits = 2, fallen.leaves = TRUE, extra = 101)

注意科学记数法。

现在,我们将创建副本并将其命名为 myformat0。我们需要为几个函数使用:::,因为它们不是从rpart.plot 导出的。请注意,我将9999 替换为100000,但您可以使用任何您想要的数字。

myformat0 <- function(x, digits=2)

    rpart.plot:::check.integer.scalar(digits)
    if(digits == 0)
        digits <- getOption("digits")
    if(digits >= 0)
        rpart.plot:::formate(x, digits, smallest=.001, largest=100000)
    else
        sapply(x, format, digits=-digits)

现在我们需要将自定义函数分配到rpart.plot 命名空间。我们可以使用assignInNamespace

assignInNamespace("format0", myformat0, ns = "rpart.plot")

现在剧情:

rpart.plot(fit, type = 5, digits = 2, fallen.leaves = TRUE, extra = 101)

【讨论】:

哇,谢谢你的帮助。这很有帮助

以上是关于如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在插入符号包中制作树图?

使用 rpart 在回归树中搜索相应的节点

rpart:分类与连续回归量的计算时间

如何在linux或perl的特定列中将科学记数法更改为数字

如何在php中将非常小的、正常的、大的、科学的数字转换为字符串

如何防止在 Python matplotlib 图中将数字更改为指数形式