我的 hist 函数没有在 R 中绘图,我该怎么办?

My hist function is not doing plots in R, what can i do?

我的 hist 函数没有在 R 中绘图,我该怎么办? 这是数据示例:

b=c(34,34,34,5,6,9,0,10,22,23)
t=hist(b)
t

输出为:

$breaks
[1]  0  5 10 15 20 25 30 35
$counts
[1] 2 3 0 0 2 0 3
$density
[1] 0.04 0.06 0.00 0.00 0.04 0.00 0.06
$mids
[1]  2.5  7.5 12.5 17.5 22.5 27.5 32.5
$xname
[1] "b"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"

我能做什么?谢谢。

一般注意事项

您的 hist 函数 完全 它应该做什么。此函数主要用于它的副作用,即绘制直方图(当参数plotTRUE默认)。但是 value 函数 returns 是一个 list 有几个组件 (breaks, counts, densitymidsxnameequidist)。因此,当您调用 t = hist(b) 时,您将 return 由 hist 函数分配给变量 t (顺便说一句 t 是 R 中的函数,我不会使用 t 作为变量名)。因此,当您调用 t 时,它会打印 returned 值,上面提到的 list,但 不是 plot 你可能希望看到的。

亲自动手(更新)

假设您的 objective 是要 保存 直方图并在后面绘制它,您可以使用以下观察结果:

可重现的数据

首先我们创建一个可重现的例子:

set.seed(72158867)

x <- rnorm(100)

这里我们给变量x分配了100个随机值。

创建直方图,不作图,将结果赋给变量

现在我们准备创建直方图,并将hist()计算的结果return赋值给变量h:

h <- hist(x, plot = FALSE)

在这里,我们使用参数 plot = FALSE 告诉函数 return 结果 而无需绘制 .

检查h

的内容

return由hist()编辑的是一个对象。我们可以深入研究这个对象,找到如何使用它来实现我们的 objectives.

returned 对象的结构

首先,我们可以使用 str() 函数检查 returned 对象的 结构

str(h)

# List of 6
# $ breaks  : num [1:11] -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 ...
# $ counts  : int [1:10] 5 8 15 20 17 14 14 5 1 1
# $ density : num [1:10] 0.1 0.16 0.3 0.4 0.34 0.28 0.28 0.1 0.02 0.02
# $ mids    : num [1:10] -1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 1.75 2.25 2.75
# $ xname   : chr "x"
# $ equidist: logi TRUE
# - attr(*, "class")= chr "histogram"

这里我们可以看到hist()编辑的对象return是一个list-like结构,有几个元素。我们还可以看到结果 hist() returned 是一个 class histogram.

的对象

Class returned 对象

识别由 hist() 编辑的对象 return 的 class 的另一种方法是调用 class() 函数它。

class(h)

#[1] "histogram"

您还可以从您的控制台调用 ?hist,并查找有关 returned 值 的信息 hist()

在 returned 对象上定义的方法

要找出方法定义在classhistogram的对象上,我们可以使用methods()函数,如图所示在下面的示例中:

methods(class = class(h))

# [1] lines plot 
# see '?methods' for accessing help and source code

现在我们知道 class histogram 的对象接受两个方法 linesplot。我们对第一个不感兴趣(但我想知道它的作用),但第二个似乎是我们正在寻找的东西。

在 returned 对象上调用 plot 方法

让我们在 histogram 对象上调用 plot() 函数:

plot(h, col = 'skyblue', border = 'yellow', main = 'Histogram for SOq #72158867')

它按预期工作!

基本上,这就是 hist() 函数在您调用它时所做的事情:

  • 它根据您的数据创建一个 class histogram 的对象;
  • 它在您的 histogram 对象上调用 plot 方法;
  • 它无形地 return 生成了一个 histogram 对象。

当然还有更短的方法可以找到它。只需在您的控制台中输入 ?hist,您将自己找到所有与 hist 相关的信息。