Schreiben Sie eine Funktion sillyzv( ), welche die folgenden Argumente hat:
• n: Skalar, der die Anzahl der Beobachtungen pro Variable angibt.
• k: Skalar, der die Anzahl der Variablen angibt.
• mean: Vektor der Länge k (oder geeignet wiederholbar), der die Mittelwerte der Variablen enthält.
• sd: Vektor der Länge k (oder geeignet wiederholbar), der die Standardabweichung der Variablen enthält.
Die Funktion soll entsprechend Beobachtungen aus der Normalverteilung ziehen und eine Matrix zurückgeben, die n Zeilen fu ̈r die Beobachtungen und k Spalten für die Variablen hat. Die Mittelwerte und Standardabweichungen in den Spalten variieren je nach mean und sd.
Dies soll ich im ersten Schritt möglichst ineffizient gestalten indem ich die Ergebnismatrix für jede Variable spaltenweise dynamisch erweitere. Ich soll dabei jedoch keine unnötigen Dinge tun und die n Beobachtungen pro Variable mit einem Aufruf erzeugen.
Danach soll ich, smartzv() möglichst effizient programmieren, d.h. die Ergebnismatrix möglichst mit einem vektorwertigen Aufruf erzeugen.
Meine erste Funktion sieht folgendermaßen aus (wobei ich mir sehr unsicher bin):
Code: Alles auswählen
sillyzv <- function(n,k,mean,sd){
m<-matrix("numeric",nrow = n,ncol=k)
for (i in 1:k) {
assign(paste("x", i,sep = ""),rnorm(n = n,mean = mean[i],sd = sd[i]))
m[,i]<-cbind(get(paste("x",i,sep="")))
}
return (m)
}
Die "effiziente" Methode hab ich folgendermaßen probiert, leider stimmen die Ergebnisse nicht überein:
Code: Alles auswählen
smartzv <- function(n,k,mean,sd){
m<-matrix("numeric",nrow = n,ncol=k)
m[,1:k]<-rnorm(n = n,mean = mean[1:k],sd[1:k] = sd)
return(m)
}
Vielen Dank!