Ich habe zwei Listen (A und B), die jeweils 5 Vektoren der Länge 3. Ich habe auch eine 3x3-Matrix Z.Verwendung mapply Operationen auf Listen von Vektoren auszuführen: Probleme mit Indexspezifikation
Ich möchte führe Operationen an den Elementen von A durch, benutze B und Z und gib sie an eine 3x5-Matrix aus. Ich bin in der Lage, dies zu tun erfolgreich eine for-Schleife als
#Create two lists of vectors
A = list(c(1,2,1), c(2,1,2), c(3,2,2),c(1,2,5),c(1,4,2))
B = list(c(2,3,1), c(1,3,4), c(2,5,2), c(2,4,1),c(1,4,1))
#Create 3x3 matrix
Z = rbind(c(2,3,5),c(3,2,3), c(1,1,1))
#initialize empty 3x5 matrix
Y = matrix(NA,3,5)
for (i in 1:3)
{
for (j in 1:5)
{
#Take the ith element of the jth vector from A, and divide it by
#the dot product of the jth vector from B and the ith row of Z
Y[i,j] = A[[j]][i]/sum(B[[j]]*Z[i,])
}
}
Diese Erträge folgt (für Y)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.05555556 0.06451613 0.10344828 0.04761905 0.05263158
[2,] 0.13333333 0.04761905 0.09090909 0.11764706 0.28571429
[3,] 0.16666667 0.25000000 0.22222222 0.71428571 0.33333333
Ich versuche, herauszufinden, wie mapply zu verwenden, um dies effizienter zu machen.
Bisher habe ich diese bekam:
mapply(function(x,y,z) x/sum(y*z), x=A,y=B,z = Z)
aber das ist nicht richtig funktioniert. Ich schätze, dass vielleicht die Aufspaltung der Aufgabe in vielleicht zwei separate Mapplys der Fall sein könnte, und vielleicht müsste ich die Matrizen und Listen reorganisieren, so dass die Indizes irgendwie zusammenpassen. Ich hatte einige Erfolge mit der Anwendungsfamilie, aber ich bin noch nicht flüssig genug, um herauszufinden, wie ich dieses Problem am besten angehen kann. Ich würde mich über jede Führung freuen.
Ah! ich danke dir sehr. Ihre Antwort löst nicht nur mein Problem, sondern hilft mir auch dabei, mit der Bewerberfamilie besser zu werden. Sehr geschätzt! – spacediver