Инкрементальное построение в R без сброса

Какие параметры (и пакет) вы бы использовали для постепенного отображения результатов расчета?

Представьте, что я хочу отобразить результаты вычисления, которое длится очень долго, и я не хочу ждать до конца, чтобы увидеть какие-то результаты. Было бы не очень хорошей идеей рисовать каждую точку, потому что каждый раз запускать команду построения графика будет очень медленно. Вместо этого я буду отображать каждые N точек (сохраняя их в векторе).

Например, если я делаю это с рядом Фибоначчи, разбивая цикл на два вложенных цикла, чтобы отображать результаты каждые 10 итераций:

fibo=rep(0,112);fibo[1]=0;fibo[2]=1;
plot(fibo)              #to initialize 
for(ii in 0:10) {
  for(jj in 0:9) {
    fibo[ii*10+jj+3]=fibo[ii*10+jj+2]+fibo[ii*10+jj+1];
  }
plot(fibo)
}

Но он не сохраняет график предыдущей итерации. Как мне это сделать? Это не очень хороший пример, потому что цифры растут слишком быстро. И инициализация графика не знает максимальное значение y заранее. Может быть, лучше использовать какой-нибудь другой лучший графический пакет?


person skan    schedule 26.03.2013    source источник
comment
Можете ли вы угадать вероятные пределы/теоретические пределы оси Y? Это могло бы сделать вещи немного проще и позволить вам иметь только один вызов plot, а затем добавлять некоторые выборочные данные с помощью points во время работы программы.   -  person thelatemail    schedule 26.03.2013
comment
Вы можете следовать методу в ответе thelatemail: замените строку plot(fibo) в своем цикле на points(fibo[(ii*10+1):(ii*10+12)]) (может быть, там немного неправильный индекс).   -  person Carl Witthoft    schedule 26.03.2013


Ответы (1)


Вот простой пример того, как это сделать, установив точки, которые должны быть нанесены на график, и добавляя points только при соблюдении этого критерия:

# set the frequency with which to plot points
plotfreq <- 10

# set the x and y limits of the graph
x.limits <- c(1,100)
y.limits <- c(0,100)

# initialise a vector and open a plot
result <- vector(mode="numeric",length=100)
plot(result,ylim=y.limits,xlim=x.limits,type="n")

# do the plotting
plot.iterations <- seq(plotfreq,length(result),by=plotfreq)
for (i in seq_along(result)) {
  result[i] <- result[i] + i

  # only plot if the data is at the specified interval
  if (i %in% plot.iterations) {
    points(i,result[i])
  }

}
person thelatemail    schedule 26.03.2013