在R生成的PDF文件中添加页码

3
我在尝试为使用 R 中的 plot 生成并保存为 pdf 格式的文件添加页码。我使用 d_pplydata.frame 进行操作,并在其中使用 plot 命令。
我认为使用 d_pply 可以避免使用 for 循环。下面是来自我的原始数据示例,其中包含更多因子。
data1 <- structure(list(fact = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), .Label = c("A", "B", "C"), class = "factor"), speed = c(10.56, 
11.94, 13.61, 15, 16.67, 18.06, 19.44, 20.28, 21.11, 21.67, 22.5, 
23.06, 23.61, 24.44, 25, 25.56, 26.11, 26.94, 27.5, 15.83, 16.67, 
17.5, 18.06, 18.89, 19.72, 20.56, 21.11, 21.94, 22.5, 23.33, 
23.89, 24.44, 25, 25.56, 26.11, 26.67, 27.22, 8.61, 10.28, 11.94, 
13.61, 15, 16.39, 17.5, 18.89, 19.72, 20.83, 21.67, 22.22, 22.5, 
23.06, 23.61, 23.89, 23.89, 23.61)), .Names = c("fact", "speed"
), class = "data.frame", row.names = c(NA, -55L))

我尝试使用全局索引来完成任务。但是我正在寻找一种更有效的方法来做这件事。这个链接并没有完全帮助到我。

index1 <<- 0
plot_pg <- function(x)
{ index1 <<- index1+1
  plot(x$speed,main=paste0('pg# ',index1))
}

genplot <- function(df1,filename1)
{
  pdfNAME <- paste0(name1,'.pdf')
  pdf(pdfNAME)
    d_ply(df1,c('fact'),function(x) plot_pg(x))
  dev.off()
}
genplot(data1,'data1Plots')

更新

这里需要提到的是,我将会按照不止一个变量来分割我的数据框,类似于ddply(data,c('var1','var2'),function(x) MyplotFunc(x))


一个for循环有什么问题吗? - joran
这里的示例数据仅显示了两个因素,但实际上我有大约480个因素,并且将来可能会增加。您认为for循环是否有效?无论如何,如果没有“apply”函数族,您将如何使用for循环完成它。 - Stat-R
1个回答

4
我会简单地这样做:
genplot <- function(df1,filename1){
  pdfNAME <- paste0(filename1,'.pdf')
  tmp <- split(df1,df1$fact)
  pdf(pdfNAME)
  for (i in seq_along(tmp)){
    plot(tmp[[i]][,'speed'],main = paste0("pg#",i))
  }
  dev.off()
}
< p >“for”循环本质上慢的想法是错误的。问题在于,在for循环中很容易陷入糟糕的编码技巧,这会使您正在执行的操作花费很长时间。

在这种情况下,您在for循环中所做的所有操作都是绘图,因此我怀疑使用类似“lapply”的东西与此之间几乎没有性能差异。需要注意的事项是增加对象(即追加)和修改对象,因为两者都会导致过度复制。


我使用d_pply的另一个原因是我需要按多个变量拆分data.frame。但在这种情况下,我无法让split起作用。有什么建议吗? - Stat-R
@Stat-R 阅读文档:“在这种情况下,'因子'的意义是as.factor(f)定义了分组,或者是这些因子的列表,其相互作用用于分组。” - joran
当我写下tmp <- split(df1,as.list(df1$fact,df1$fac2))时,R进入了无限循环,其中fac2是第二个因子。你知道为什么吗?最终使用tmp <- split(df1,list(df1$fact,df1$fac2))解决了问题... - Stat-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接