Das Problem: AF ist nicht cumulutaing. Und es ist etwas falsch mit der Adressierung an Matrixelementen und mit dem Vergleich ...Operationen in Doppel-for-Schleife funktioniert nicht R
Meine Daten
VF <- matrix(c(40, 70, 80, 35,
90, 66, 15, 46,
50, 52, 60, 80,
30, 73, 30, 40,
80, 70, 76, 69), nrow = 5, byrow = TRUE)
VA <- matrix(c(40, 25, 67, 43,
5, 26, 80, 43,
45, 35, 30, 10,
63, 13, 60, 45,
10, 19, 11, 22), nrow = 5, byrow = TRUE)
UV <- c(1, 0, 0, 1)
Ich versuche, meine Funktion aufzurufen
f <- function(VF, VA, UV) {
vote_for <- VF
vote_against <- VA
user_vote <- UV
am_law <- ncol(vote_for)
am_fr <- nrow(vote_for)
AF <- 0
AFP_vec <- c(0)
for (i in 1:am_fr) {
AF <- 0
for (j in 1:am_law) {
if (user_vote[j] == 1) {
AF <- AF + vote_for[i][j]
} else {
AF <- AF + vote_against[i][j]
}
}
AFP <- AF/am_law
append(AFP_vec, AFP)
}
return(AFP_vec)
}
Das Ergebnis des Aufrufs
f(VF, VA, UV)
ist
[1] 40 [1] NA [1] NA [1] NA [1] 90 [1] NA [1] NA [1] NA [1] 50
[1] NA [1] NA [1] NA [1] 30 [1] NA [1] NA [1] NA [1] 80 [1] NA [1] NA [1] NA [1] 0
aber ich wünschte, es wäre nur 5 Werte in meinem AFP_vec.
Bitte, hilf mir. Ich bin ein Anfänger. Und ich kann nicht verstehen, was falsch ist.
Hey, bitte können Sie klären, wie Sie erwarten, dass die Ausgabe aussieht. – CroGo
Abhängig von den Werten in UV, wähle ich Elemente aus der Matrix vote_for oder vote_against und kumuliere sie. (Ich erwarte, dass AF meine kumulative Variable ist). Dann berechne ich den Mittelwert in einem Satz von Elementen (übergehe einen Schritt in "für (i in 1: am_fr)" - Schleife) - AFP und drücke in den Vektor AFP_vec. Nach meinen Daten, AFP_vec muss mir 5 Werte geben – Chet
Ok mein derzeitiges Verständnis ist die Ausgabe sollte ein Vektor sein, der die gleiche Länge wie die Anzahl der Zeilen als VF & VA hat, wobei der Wert des Elements der Mittelwert der Zeilen ist in VF & VA, wo man VF nimmt wenn UV = 1 und VA wenn UV = 0? – CroGo