r - 如何在页面上查找 R 图形的字节大小?

标签 r memory size figure

我想监控在各个页面上用 R 生成的图形的基本质量,例如每个页面的字节大小,... 我现在只能做平均页面的质量保证,请参阅下一章。 我认为任务必须有一些内在的东西而不是平均措施。

Rplots.pdf 中生成 4 页的代码,我想知道输出中每个页面的字节大小;也欢迎任何其他页面输出统计数据; 您可以获得对象的基本内存监控 here但我希望它与 PDF 中的输出相对应

# https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/plot.html
require(stats) # for lowess, rpois, rnorm
plot(cars)
lines(lowess(cars))

plot(sin, -pi, 2*pi) # see ?plot.function

## Discrete Distribution Plot:
plot(table(rpois(100, 5)), type = "h", col = "red", lwd = 10,
     main = "rpois(100, lambda = 5)")

## Simple quantiles/ECDF, see ecdf() {library(stats)} for a better one:
plot(x <- sort(rnorm(47)), type = "s", main = "plot(x, type = \"s\")")
points(x, cex = .5, col = "dark red")

## TODO summarise here the byte size of figures in the figures (1-4)
# Output: Rplot.pdf where 4 pages; I want to know the size of each page in bytes

我目前正在命令行中进行基本的质量保证,但想将其中的一些移至 R,以便更快地观察错误。

预期输出:字节大小,例如 ls -l

的第 4 列

获取输出文档中单个页面的平均字节大小

限制

  • 页面数据同质性的要求。此方法仅适用于所有页面都来自同一示例的情况。 否则就很麻烦,因为它只是平均,而不是描述当时的个别现象。 其他可能的弱点
  • PDF 元素和元数据。将 PDF 文件视为一个整体,而不是关注图形对象本身。所以这限制了绝对值的使用,因为文件大小还包含标题和其他与图形对象无关的元数据。

代码

filename <- "main.pdf"
filesize <- file.size(filename)
# http://unix.stackexchange.com/q/331175/16920
pages <- Rpoppler::PDF_info(filename)$Pages 

# print page size (= filesize / pages)
pagesize <- filesize / pages

## data of example file 
num 7350960
int 62
num 118564

输入:任何 62 页的文档
输出:平均单个页面大小 (118564)

测试and's回答

输出但您不能轻易将输入更改为您想要的 PDF 文件

     files                             size_bytes 
[1,] "./test_page_size_pdf/page01.pdf" "4,123,942"
[2,] "./test_page_size_pdf/page02.pdf" "    4,971"
[3,] "./test_page_size_pdf/page03.pdf" "    4,672"
[4,] "./test_page_size_pdf/page04.pdf" "    5,370"

输入:任何 64 页的文档
预期输出:67(= 64 + 3)页,未分析 4

R: 3.3.2
操作系统:Debian 8.5

最佳答案

如果您的系统上尚未安装 pdftk 实用程序,请下载并安装它,然后从 R 中尝试以下替代方法之一。

1) 它将返回一个数据框,其中包含以字节为单位的页面文件大小和其他信息。

myfile <- "Rplots.pdf"
system(paste("pdftk", myfile, "burst"))
file.info(Sys.glob("pg_*.pdf"))

它还会生成一个文件 doc_data.txt,其中包含一些您可能感兴趣也可能不感兴趣的杂项信息。

1a) 此替代方案不会生成任何文件。它只会将页面的字符大小作为数字向量返回。

myfile <- "Rplots.pdf"
pages <- as.numeric(read.dcf(pipe(paste("pdftk", myfile, "dump_data")))[, "NumberOfPages"])
cmds <- sprintf("pdftk %s cat %d output - | wc -c", myfile, seq_len(pages))
unname(sapply(cmds, function(cmd) scan(pipe(cmd), quiet = TRUE)))

如果pdftk,以上应该有效和 wc在你的路上。请注意,在 Windows 上您可以找到 wc在 Rtools 发行版中,通常位于 "C:\\Rtools\\bin\\wc"安装 Rtools 后。

2) 这个替代方案类似于 (1) 但使用动画包:

library(animation)

ani.options(pdftk = "/path/to/pdftk")
pdftk("Rplots.pdf", "burst", "pg_%04d.pdf", "")
file.info(Sys.glob("pg_*.pdf"))

关于r - 如何在页面上查找 R 图形的字节大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982408/

相关文章:

r - 使用 R 在 Sankey 图中突出显示从开始到结束的所有连接路径

javascript - 自动调整 Div 背景图像

r - 禁用 cat 命令

r - 在 R 中使用西类牙语文本创建语料库

c++ - 访问未分配的内存 C++

iphone - 将值设置为 NSManagedObject 时,应用程序崩溃并出现 EXC_BAD_ACCESS 或其他一些奇怪的错误

linux - Linux 内核中的内存分配

c++ - 32kB的编译代码是多少

python - 选择一定范围的数组元素并定义一个新数组

r - 逐步找到R中列表中最频繁的项目