Я нахожусь в процессе преобразования традиционного цикла в цикл foreach
для решения проблемы формулы шнурка в R;однако, я не получаю правильное накопление с помощью цикла foreach
.
library("foreach")
x = c(0, 4, 4, 0)
# coordinates of points
y = c(0, 0, 4, 4)
# coordinates of points
points <- length(x)
area <- 0
# Accumulates area in the loop
i <- 0
j <- points
# using foreach loop
area <- foreach(i = seq(x), .combine = "+") %do% {
(x[[j]] + x[[i]]) * (y[[j]] - y[[i]])
j <- i
}
area # 10
Это всего лишь 1 + 2 + 3 + 4. Он не учитывает точки в x и y.
# using traditional loop
area <- vector("list", length(x))
for (i in seq_along(x)) {
area[[i]] <- (x[[j]] + x[[i]]) * (y[[j]] - y[[i]])
j <- i
}
area
# [[1]]
# [1] 0
# [[2]]
# [1] 0
# [[3]]
# [1] -32
# [[4]]
# [1] 0
Сумма составляет 32 единицы, что правильно.
Что я делаю не так с циклом foreach
? Спасибо.