Hallo Jörg,
danke schonmal für den Hinweis mit <<-.
Hier nochmal die ursprüngliche Frage:
Ich möchte verschieden große Teile in Kisten packen und dabei für jedes Teil angeben, in welche Kiste es gepackt werden soll.
Für jedes Teil muss also überprüft werden, ob es noch in die aktuelle Kiste passt, oder eine neue benötigt wird (wird eine neue Kiste benötigt, ist die alte quasi raus und darf nicht mehr befüllt werden).
Zusätzlich sind alle Teile in Gruppen untergliedert, wobei in einer Kiste nur Teile der gleichen Gruppe zusammengepackt werden dürfen.
Aktuell benutze ich eine for-Schleife, hier der verwendete Code:
Code: Alles auswählen
volumen_teil <- c(20, 50, 90, 20, 30, 10, 10, 80, 10, 20, 50)
id_teil <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
gruppe <- c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2)
df <- data.frame(id_teil, gruppe, volumen_teil)
volumen_kiste = 100
id_kiste = 1
zuteilung <- function(df){
for (i in 1:nrow(df)){
ifelse((df$volumen_teil[i] <= volumen_kiste), (df$id_kiste[i] <- id_kiste) & (volumen_kiste <- volumen_kiste - df$volumen_teil[i]), (id_kiste <- id_kiste +1) & (df$id_kiste[i] <- id_kiste) & (volumen_kiste <- (100 - volumen_teil[i])))
}
df
}
df <- zuteilung(df)
Zusätzlich ist noch Vektorisierung und die Überprüfung auf die gleiche Gruppe eingebaut. Zur besseren Verständlichkeit habe ich das hier allerdings weggelassen.
Das Problem ist, dass die for-Schleife zu langsam ist.
Die Gruppen sind unabhängig voneinander und könnten daher parallel bearbeitet werden.
Ich möchte gerne die for-Schleife nicht für den gesamten dataframe, sondern nur für eine Gruppe durchlaufen lassen.
Diese Funktion soll dann über eines der "apply" packages auf alle Gruppen angewandt werden.
Was ich nicht hinbekomme, ist der Funktion zu sagen, dass ich nur auf die Zeilen der entsprechenden Gruppe (anstatt auf alle Zeilen des gesamten dataframes) zugreifen möchte und diese Funktion dann auf alle Gruppen zu "mappen".
Über jegliche Hilfe wäre ich bereits sehr dankbar!
Viele Grüße
Alex