1

次のデータフレームがあります。

myDates <- seq(as.Date("2013/1/1"), as.Date("2013/1/10"), "days");        
x1 <- 1:10
y1 <- 11:20
myTable <- data.frame(myDates, x1, y1)

ここで、日付を 2 日間の間隔に分割してから、おそらくループを使用してファイルにx1プロットy1し、最終的に.png5 png files

私の考えは、関数を使用して を 2 日の間隔に分割し、次に a を使用して、次のように異なるレベルに 1 つずつプロットすることでした。data.framesplitcutfor-loop

twoDayInt <- seq(as.Date("2013/01/01"), as.Date("2013/01/10"), by = "2 days")
myTableSplit <- split(myTable, cut(myTable$myDates, twoDayInt))
for (j in 1:length(twoDayInt)) {
    fileName <- sprintf("/home/kigode/Desktop/%s_2dayInteval_%02i.png ", "myGraph",j) 
    png(fileName,width=700,height=650)
    # this is where i cant figure out what to put
    plot(myTableSplit$x1[j], myTableSplit$y1[j])
}
dev.off()  

今、私は for ループ セクションで立ち往生しており、続行する方法についての手がかりを求めています。

4

1 に答える 1

1

ここにはかなりの数の小さな間違いがあります:

  • まず、jubaが指摘したdev.off()ように、ループの内側に入る必要があります。
  • 第二に、myTableSplitのリストですdata.frames。したがって、要素にはjasを使用してアクセスする必要がありますmyTableSplit[[j]]
  • 第3に、x1およびy1列は。なしでインデックス付けする必要がありますj
  • 第4に、カウンター変数twoDayIntのエントリが1つ少なくなります(6ではなく5)。これにより、 5つの部分すべてmyTableSplitではcutなく、4つだけになります。したがって、修正として、の範囲をtwoDayIntまでに拡張し、 (これは完全に異なる方法で実行できますが)2013/01/12の最初の5つの値のみにインデックスを付けました。for-loopマナー、私はあなたがむしろあなたのコードの修正を望んでいると思いました)。

これらすべてのエラーの修正:

myDates <- seq(as.Date("2013/1/1"), as.Date("2013/1/10"), "days")
x1 <- 1:10
y1 <- 11:20

myTable <- data.frame(myDates, x1, y1)
# note the end date change here
twoDayInt <- seq(as.Date("2013/01/01"), as.Date("2013/01/12"), by = "2 days")
myTableSplit <- split(myTable, cut(myTable$myDates, twoDayInt))
# index 1:5, not the 6th value of twoDayInt
# you could change this to seq_along(myTableSplit)
for (j in head(seq_along(twoDayInt), -1)) {
    fileName <- sprintf("/home/kigode/Desktop/%s_2dayInteval_%02i.png", "myGraph",j) 
    png(fileName,width=700,height=650);
    # [[.]] indexing for accessing list and $x1 etc.. for the column of data.frame
    plot(myTableSplit[[j]]$x1, myTableSplit[[j]]$y1)
    dev.off() # inside the loop
}

編集:別の方法として、あなたがやろうとしていることは、一度に2つlapplyの行を使用してピックアップすることによって直接達成できます。data.frame

# here, the number 1,3,5,7,9 are given to idx 1-by-1
lapply(seq(1, nrow(myTable), by=2), function(idx) {
    fileName <- sprintf("/home/kigode/Desktop/%s_2dayInteval_%02i.png", "myGraph",idx) 
    png(fileName,width=700,height=650);
    plot(myTable$x1[idx:(idx+1)], myTable$y1[idx:(idx+1)])
    dev.off()
})
于 2013-02-09T13:12:57.560 に答える