set.seed(120834)
DT <- data.table(var = rnorm(100))
相比:
> hist(DT[ , var]) #of course plot is drawn
同
> DT[ , hist(var)]
$breaks
[1] -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5
$counts
[1] 1 1 6 7 16 20 20 12 12 3 2
$density
[1] 0.02 0.02 0.12 0.14 0.32 0.40 0.40 0.24 0.24 0.06 0.04
$mids
[1] -2.75 -2.25 -1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 1.75 2.25
$xname
[1] "var"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
为什么后者打印由hist返回的对象,而不是前者?有没有办法压制这个?
我在hist.default的代码中看到该对象被无形地返回:
if (plot) {
plot(r, freq = freq1, col = col, border = border, angle = angle,
density = density, main = main, xlim = xlim, ylim = ylim,
xlab = xlab, ylab = ylab, axes = axes, labels = labels,
...)
invisible(r)
}
(并查看DT [,hist(var,NA)]中的错误确认[.data.table确实正在调用hist.default)
那么[.data.table如何设法取代这个看不见的回访呢?也许是不可见对象无形地返回到隐藏环境,但是那个环境中的对象会被明显地返回?
最佳答案 这是一个已知的错误,截至目前,还没有已知的解决方案或计划来修复它.
有关更新,请参见GH Issue #482.
从Matt编辑 – 解决方法
你可以像这样压制它:
DT[ , {hist(var);NULL}]
要么
invisible(DT[,hist(var)])
看起来我们需要重新审视这一点,因为常见问题解答2.18需要更新:“2.18我只使用j来解决它的副作用,但我仍然得到了返回的数据.如何阻止它?”我过去曾试图做得更好,花了好几天的时间.我们在一定程度上受到R内部的限制(如FAQ 2.22所述)