Проблема: AF не является кумулятивным. И его что-то не так с адресацией к матричным элементам и сравнения ...операции в двойном цикле не работают R
Мои данные
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)
Я пытаюсь вызвать моя функция
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)
}
Результат вызова
f(VF, VA, UV)
является
[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
, но я бы хотел, чтобы это было всего 5 значений в моем AFP_vec.
Пожалуйста, помогите мне. Я новичок. И я не понимаю, что случилось.
Эй, пожалуйста, вы можете уточнить, что вы ожидаете от вывода. – CroGo
В зависимости от значений в УФ, я выбираю элементы из матрицы vote_for или vote_against и кумулирует их. (я ожидаю, что AF - моя кумулятивная переменная). Затем я вычисляю среднее значение в одном наборе элементов (проходя один шаг в «for (i in 1: am_fr)» - loop) - AFP и вставляем в вектор AFP_vec. По моим данным, AFP_vec должен дать мне 5 значений – Chet
Хорошо, что мое текущее понимание - это выход, который должен быть такой же длины, как число строк, таких как VF & VA, где значение элемента является средним для строк в VF & VA, где вы берете VF, если UV = 1 и VA, если UV = 0? – CroGo