2016-03-20 5 views
0

このコードは動作しているようですが、停止せず、Macのデスクトップの「グラフ」フォルダにファイルを保存できません。データベースのセクションからRに自動的に保存される図形を作成できませんか?

i <- 1L 
for (i in 1:nrow(p)) { 
mypath <- file.path("/Users/atreyu/Desktop/graphs/",paste("DATA_", i, ".jpg", sep = "")) 
jpeg(file=mypath) 
dsmall <- p[i:(i+10),] 
qplot(dsmall$o, dsmall$t) 
dev.off() 
i <- i+10 
} 

基本的に、自分のデータのセクションで行われた数字のギャラリーを作成したいと思います。各セクションは10行で構成されています。

コードはRにあり、pは約100k行のデータフレームです。より効率的なコードを書くにはどうすればいいですか?

UPDATE:

私は私ができる、私はちょうどグラフを保存するためのループのために行う方法を知りたい、と私はまだ、グラフを保存することができるように見えることはできません(以下にコードを変更

for (i in 1:(nrow(p))) 
{ 
mypath <- file.path("/Users/atreyu/Desktop/graphs",paste("DATA_", i, ".jpg", sep = "")) 
dsmall <- p[i:(i+10),] 
jpeg(filename = mypath) 
qplot(dsmall$c, dsmall$t) 
dev.off() 
} 

UPDATE)1つのグラフを保存しますが、forループを使用していない2:私は、これが機能することを考え出し

for (i in 1:(nrow(p))) 
{ 
mypath <- file.path("/Users/atreyu/Desktop/graphs") 
dsmall <- p[i:(i+10),] 
jpeg(filename = paste(mypath,"DATA_", i, ".jpg", sep = "")) 
plot(dsmall$c, dsmall$t) 
dev.off() 
} 

プロットではループできますが、qplotではループできないことがわかりました。どのように奇妙ですか?

+0

library(ggplot2) n = 1e2 p = data.frame(c = rnorm(n), t = rnorm(n)) for (i in 1:(nrow(p)-9)) { mypath <- file.path("~",paste0("DATA_", i, ".jpg")) dsmall <- p[i:(i+9),] a = qplot(dsmall$c, dsmall$t) ggsave(mypath, a) } 

あなたが経由でエクスポートディレクトリを作成していることを確認してください。まず、どうしてですか?これらのファイルをすべて見ることはできないので、少し役に立たないようです。しかし同じように重要なことに、同じパスに100000個のファイルを持つことは、ファイルシステムに実質的な課税となります。ファイルシステムは、ノードごとに比較的少数のファイルに対して最適化されます。単一のディレクトリに多くのファイルを格納すると、ファイルシステムのクロールが遅くなります。 (編集:ああ、それは10000のファイルを作成することになっています。それはファイルシステムの問題は少なくなりますが、私はそれも同様に不合理だと思う) –

+0

私はこれを行う理由があります。これらのファイルは、圧縮され、ピクルされ、別のソフトウェアに供給されます。 Rここでは、それらの数字を作るためにのみ使用されます。これを行うには、より優れたソフトウェア(R以外)をお勧めしますか?私はRの人ではなく、これを行うためにRを今日拾った。なぜなら、これに対してより良いソフトウェアを見つけられなかったからだろうか? – Antaeus

+1

Rは問題ではありません。問題は私が前のコメントで述べた2つのことです。正直なところ、下流のソフトウェアはひどく想像が上がっているように見えます。なぜ、*生データ*を受け入れて、その場で所望のプロットを作成しないのですか? –

答えて

1

まず、削除:あなたがwhileループを使用している場合を除き

i <- i+10 

は、ループカウンタを変更しないでください。

for (i in 1:(nrow(p)-9)) 

for (i in 1:nrow(p)) 

は、に行く:

変更

dsmall <- p[i:i+9,] 

dsmall <- p[i:(i+9),] 

にこれは、その必要です0

最後に、本当に助けるために、それは使用してデータのサンプルを与えるために素晴らしいです:議論パー

dput(data_here) 

編集

をコメントで、アスカーは本当にiインデックスを変更したいです次のように:

for(i in seq(1, nrow(p), by = 10)) 

Reduxの

userディレクトリ(~/)に92個の個別グラフが生成されます。あなたは**強く** 100000個のグラフィックファイルを作成再考すべき

dir.create("/Users/atreyu/Desktop/graphs", recursive = T) 
+0

毎回10行ジャンプしたいのですが、1つずつジャンプしたくないのですか?それでは、forループを使用せず、whileループを行ってみることをお勧めします。 – Antaeus

+0

だから、毎回10行のジャンプが欲しいですか?それから、 'i 'に以下の値を与える: ' seq(1、nrow(p)、by = 10) 'を使うべきです: ' [1] 1 11 21 31 41 51 61 71 81 91 ' – coatless

+0

' i'を10ずつ増やしたい場合は、 '1:nrow(p)'を上記のように切り替える必要があります。また、最後の反復で境界を越えることを避けるために、サブセット '(i + 10)'を '(i + 9)'に切り替える必要があります。 – coatless

関連する問題