Итак, моя цель - заполнить значения в последнем столбце фрейма данных.Фрейм данных [343,8].Я написал решение для этого, но оно не работает, и мне любопытно, почему моя идея не будет работать:
result = vector(length = 3)
for(i in 1:343){
for(j in 1:3){
result[j] = combos[i:j]
}
combos$prize[i] = score(result)
}
Имя большего фрейма данных - "комбо", последний столбецфрейм данных "приз".
Моя попытка состояла в том, чтобы создать пустой вектор «результат», заполнить его значениями из первых трех столбцов «комбо», а затем применить созданную мной функцию «Score» к «результату».вектор, и, наконец, заполните конкретную запись в «комбинированном» фрейме данных значением, полученным из «Score».
Моя версия не работает, но в учебнике есть решение, которое работает:
for (i in 1:nrow(combos)) {
symbols <- c(combos[i, 1], combos[i, 2], combos[i, 3])
combos$prize[i] <- score(symbols)
}
Сейчас я не вижу большой разницы между тем, что сделал автор, и мной.Да, он не использовал второй цикл FOR, но процедура для достижения окончательного результата кажется последовательной.
С учетом сказанного, что я не сделал правильно?
РЕДАКТИРОВАТЬ Это копия функции оценка , которую язвоню по моему за цикл:
score = function(symbols) {
# identify case
same = symbols[1] == symbols[2] & symbols[2] == symbols[3]
bars = symbols %in% c("B","BB","BBB")
# get prize
if (same) {
payouts = c("DD" = 100, "7" = 80, "BBB" = 40, "BB" = 25, "B" = 10, "C" = 10,
"0" = 0)
prize = unname(payouts[symbols[1]])
} else if (all(bars)){
prize = 5
} else {
cherries = sum("C" == symbols)
prize = c(0,2,5)[cherries + 1]
}
# adjust for diamonds
diamonds = sum("DD" == symbols)
prize * 2 ^(diamonds)
}