Jak zoptymalizować poniższy kod za pomocą zagnieżdżonej pętli while? Wielokrotna opcja?

Mam wyzwanie z fragmentem kodu, którego wykonanie zajmuje bardzo dużo czasu i zastanawiam się, jakie są najważniejsze sztuczki, aby zoptymalizować czas wykonania tego kodu. Muszę przyznać, że dane wejściowe data.frame są znaczące (140 000 wierszy), a dane wyjściowe .frame to około 220 000 wierszy.

Przykład danych wejściowych.frame:

head(extremes)
X_BusinessIDDescription     min         max         month
ID105                       2007-12-01  2008-06-01  2007-12-01
ID206                       2007-12-01  2009-07-01  2007-12-01
ID204                       2007-12-01  2008-02-01  2007-12-01
ID785                       2008-07-01  2010-08-01  2008-07-01
ID125                       2007-11-01  2008-07-01  2007-11-01
ID107                       2007-11-01  2011-06-01  2007-11-01

Data.frame, która zostanie rozszerzona o pętlę. Data.frame jest inicjowana, aby uzyskać strukturę na miejscu.

output <- extremes[1,]
output
X_BusinessIDDescription     min         max         month
ID105                       2007-12-01  2008-06-01  2007-12-01

Inne wartości

IDcounter <- 1
IDmax <- nrow(extremes)
linecounter <- 1

Chciałbym zoptymalizować pętlę while:

while (IDcounter <= IDmax){
    start <- extremes$min[IDcounter]
    end <- extremes$max[IDcounter] # add three months
    while(start <= end){
        output[linecounter,] <- extremes[IDcounter,]
        output$month[linecounter] <- start
        linecounter <- linecounter+1
        start <- seq(start, by ="month", length=2)[2]
    }
    IDcounter <- IDcounter + 1
}

Dla niewielkiej liczby wierszy ten kod wykonuje się dość szybko, ale wygląda na to, że zwalnia w miarę rozszerzania się wyjścia.

Dane wyjściowe wyglądają mniej więcej tak:

head(output)
X_BusinessIDDescription     min         max         month
ID105                       2007-12-01  2008-06-01  2007-12-01
ID105                       2007-12-01  2008-06-01  2008-01-01
ID105                       2007-12-01  2008-06-01  2008-02-01
ID105                       2007-12-01  2008-06-01  2008-03-01
ID105                       2007-12-01  2008-06-01  2008-04-01
ID105                       2007-12-01  2008-06-01  2008-05-01

Dla każdego miesiąca w przedziale między min i max w pliku skrajnym tworzony jest wiersz.

Chciałbym również dowiedzieć się, jak mogę, aby ten kod mógł przygotować wiele dostępnych rdzeni zasobów obliczeniowych. OK, przyznaję, że tak naprawdę nie jest to optymalizacja, ale skróci czas wykonania, co również jest ważne.

Jochem

questionAnswers(1)

yourAnswerToTheQuestion