在包pryr(http://adv-r.had.co.nz/memory.html)函数中,object_size返回对象的大小。例如,object_size(1:1E8)返回400 MB。它使用适当的单位(B,KB,MB,GB等)返回值。但是,使用cat调用时,它仅返回以字节为单位的值。 cat(object_size(1:1E8))返回4e + 08。当使用cat调用时,如何使用原始格式(B,KB,MB ...)返回?通常我会显示我使用cat创建/导入的数据帧的信息(" mydb",dim(mydb)," \ n")。我想将object_size添加到其中。感谢。
答案 0 :(得分:2)
你可以尝试
cat(capture.output(object_size(1:1e8)))
这是因为cat
不会将print
的格式应用于其参数。
答案 1 :(得分:0)
object_size
返回类' bytes'的对象。我原以为你可能会成功使用print(),但没有。与大多数打印方法不同,pryr:::print.bytes
实际上并不返回其参数,而是通过使用cat()将字符串输出到控制台并返回NULL-object的副作用。我不确定为什么会做出这样的选择,但您可以重新定义print.bytes
pryr:::print.bytes # to get the code
print.bytes <-
function (x, digits = 3, ...)
{
power <- min(floor(log(abs(x), 1000)), 4)
if (power < 1) {
unit <- "B"
}
else {
unit <- c("kB", "MB", "GB", "TB")[[power]]
x <- x/(1000^power)
}
formatted <- format(signif(x, digits = digits), big.mark = ",",
scientific = FALSE)
paste0(formatted, " ", unit, "\n", sep = "") # return character-object
}
然后您可以指定print(object_size(x))
的结果。你可能想要放弃&#34; \ n&#34;,但是。