3

R のプロットを使用して生成され、pdf 形式で保存された pdf ファイルにページ番号を追加しようとしています。私はプロットコマンドを使用していますd_pplydata.frame

ループ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')

アップデート

data.frameここで、複数の変数で分割することを言及する必要があります..何かのようなddply(data,c('var1','var2'),function(x) MyplotFunc(x))

4

1 に答える 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()
}

forループが本質的に遅いという考えは神話です。問題は、実行中の操作に長い時間がかかる for ループで不適切なコーディング手法に陥りやすいことです。

この場合、 for ループで行っているのはプロットだけなので、これと のようなものを使用することでパフォーマンスに大きな違いがあるとは思えませんlapply。注意すべきことは、オブジェクトの成長 (つまり、追加) とオブジェクトの変更です。どちらも過剰なコピーが発生するためです。

于 2013-05-16T16:06:27.663 に答える