r - цикл foreach, не повторяющий традиционный цикл - PullRequest
0 голосов
/ 19 октября 2019

Я нахожусь в процессе преобразования традиционного цикла в цикл 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? Спасибо.

1 Ответ

1 голос
/ 19 октября 2019

foreach возвращает последнее вычисленное выражение, как в обычных функциях.

Итак, вы можете сделать:

area <- foreach(i = seq(x)) %do% {
  j0 <- j
  j <- i   
  (x[[j0]] + x[[i]]) * (y[[j0]] - y[[i]])   
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...