Seite 1 von 1

Loop und Liste

Verfasst: Sa Jan 29, 2022 4:28 pm
von Alfredo
Hallo zusammen,
ich möchte für 336 verschiedene Variablen Pseudozufallszahlen generieren (normalverteilt, nach n, x_quer und sd). Die knapp 28.000 Einzelwerte sollen in eine Liste geschrieben werden. Da die Grundgesamtheiten n unterschiedlich groß sind, muss es wohl eine Liste statt eines Data Frames sein.
Zu Fuß habe ich es hinbekommen, aber als R-Anfänger scheitere ich schon seit längerem an der Schleife. :?
Wie komme ich dahin, die Schleife R-like zu schreiben, wie müsste sie wohl aussehen? Vielen Dank für eure Hinweise

Code: Alles auswählen

vec1 <- rnorm(tytDaten[1, 6],tytDaten[1, 7],tytDaten[1, 8])
vec2 <- rnorm(tytDaten[2, 6],tytDaten[2, 7],tytDaten[2, 8])
vec3 <- rnorm(tytDaten[3, 6],tytDaten[3, 7],tytDaten[3, 8])
vec3 <- rnorm(tytDaten[3, 6],tytDaten[3, 7],tytDaten[3, 8])
lstTyt <- list(Variable1=c(vec1), 
               Variable2=c(vec2),
               Variable3=c(vec3),
               Variable4=c(vec4))
Carsten

Re: Loop und Liste

Verfasst: So Jan 30, 2022 10:53 am
von Athomas
Eine Möglichkeit wäre

Code: Alles auswählen

Parameter <- data.frame(Anzahl=c(100,200,300,400), my=100*(1:4), sigma=1:4)

Sammlung  <- mapply(rnorm, Parameter$Anzahl, Parameter$my, Parameter$sigma)

Re: Loop und Liste

Verfasst: So Jan 30, 2022 4:06 pm
von Alfredo
Vielen Dank Athomas!
An map() bzw. Tidyverse hatte ich mich bisher noch nicht herangetraut. Das Beispiel kann ich nachvollziehen und konnte es für mein Thema anpassen. :D

Re: Loop und Liste

Verfasst: So Jan 30, 2022 4:10 pm
von Athomas
Als bekennender Tidyverse-Skeptiker :D möchte ich aber hinzufügen, dass mapply() reinstes Standard-R ist und nuscht mit dem Tidyverse zu tun hat!

Re: Loop und Liste

Verfasst: So Jan 30, 2022 5:55 pm
von Alfredo
ups. Da habe ich mapply() mit map() verwechselt. :roll:

Re: Loop und Liste

Verfasst: So Jan 30, 2022 6:09 pm
von bigben
Ruhig, ganz ruhig, Brauner. Er weiß doch gar nicht, was er da gesagt hat und Im Grunde ist er doch im richtigen Team
! ;-)

Re: Loop und Liste

Verfasst: So Jan 30, 2022 6:11 pm
von EDi
Alfredo hat geschrieben: So Jan 30, 2022 5:55 pm ups. Da habe ich mapply() mit map() verwechselt. :roll:
Das äquivalent (*) von mapply, wäre purrr::pmap(). :ugeek:
purrr::map() entspräche lapply().


(*) Wenn man die doku und Funktion liest & kennt macht es wenig bis keinen Unterschied, da man sich um die Mankos (für mich vorallem typen-stabilität) kümmern kann (z.B. valididerung oder simplify = FALSE & post-processing, ...).
Wenn nicht, dann kann das einen schonmal beisen...
Anstatt sapply() kann man vapply benutzen (sapply hab ich aus meinem Vokabular gestrichen, seitdem es mich mal in einem Projekt gebissen hat). Für mapply() gibt es leider kein äquivalent dazu.
purrr ist vermutlich (?) immer langsamer als das base-pendant.

Ist letztendlich eine persönlich Stil-frage - das was bei rumkommt ist gleich... Ich nutze einfach beides purrr & lapply/vapply :D