Seite 2 von 2

Re: Apply auf alle Gruppen eines Dataframes anwenden

Verfasst: Mo Jan 28, 2019 3:59 pm
von AlexWue
jogo hat geschrieben: Mo Jan 28, 2019 3:24 pm Eine Optimierung im Sinne von geringst mögliche Anzahl von Kisten pro Gruppe ist ein recht ordentliches Problem der Zahlentheorie.

Hier ist noch eine Variante meiner Funktion:

Code: Alles auswählen

packeKisten2 <- function(Vol) {
  if (any(Vol>volumen_kiste)) { message("ein Teil ist zu groß"); stop() }
  n <- length(Vol)
  Kiste <- integer(n)
  ksum <- 0; k <- 1
  for (i in 1:n) {
    Kiste[i] <- k; ksum <- ksum+Vol[i]
    if (i==n) break
    if ((ksum + Vol[i+1]) > volumen_kiste) { k <- k+1; ksum <- 0} ## neue Kiste
  }
  Kiste
}
Übrigens: ifelse() gehört zu den langsamen Funktionen (besonders, wenn man gar nicht mit Vektoren arbeitet).

Gruß, Jörg

etwas schneller als deine andere Funktion, aber noch deutlich langsamer als die for-Schleife.

zwecks ifelse: ich arbeite mit Vektoren, das habe ich nur der Einfachheit halber weggelassen. Meine ifelse Funktion überprüft die Werte aus einem separaten Vektor und schreibt auch die Ergebnisse in separate Vektoren.

Re: Apply auf alle Gruppen eines Dataframes anwenden

Verfasst: Mo Jan 28, 2019 4:01 pm
von AlexWue
jogo hat geschrieben: Mo Jan 28, 2019 3:57 pm Hallo Alex,

kannst Du bitte mal schreiben, wieviele Zeilen Dein Dataframe hat. Wieviele Zeilen sind durchschnittlich in einer Gruppe?
Bei meiner ersten Variante ist cumsum() der Bremser, wenn der Vektor sehr lang ist und die Anzahl der Teile pro Kiste klein.

Gruß, Jörg
AlexWue hat geschrieben: Mo Jan 28, 2019 3:52 pm das funktioniert, ist aber leider langsamer als mein aktueller Code. Dennoch danke!

Mit den "apply" Packages habt ihr nicht zufällig Erfahrung?

Hallo Jörg,

es sind ca. 4 Millionen Zeilen, meine for-Schleife mit Vektorisierung braucht etwa 16 Sekunden (ohne Vektorisierung mehrere Tage).
Gruppen sind es ca. 200.000, also durchschnittlich 20 Zeilen pro Gruppe.

Gruß Alex

Re: Apply auf alle Gruppen eines Dataframes anwenden

Verfasst: Mo Jan 28, 2019 5:48 pm
von EDi
Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).

Re: Apply auf alle Gruppen eines Dataframes anwenden

Verfasst: Mo Feb 11, 2019 10:18 am
von AlexWue
EDi hat geschrieben: Mo Jan 28, 2019 5:48 pm Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).
Funktioniert und bringt die gewünschte Schnelligkeit, vielen Dank dafür!

Re: Apply auf alle Gruppen eines Dataframes anwenden

Verfasst: Mo Feb 11, 2019 6:41 pm
von EDi
AlexWue hat geschrieben: Mo Feb 11, 2019 10:18 am
EDi hat geschrieben: Mo Jan 28, 2019 5:48 pm Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).
Funktioniert und bringt die gewünschte Schnelligkeit, vielen Dank dafür!
Cool :)
Kannst du für unsere jetztigen und zukünftigen Mitleser noch deine Rcpp Lösung hier posten?