pryr:使用cat调用object_size

时间:2014-07-22 18:56:31

标签: r

在包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添加到其中。感谢。

2 个答案:

答案 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;,但是。