Для Loop в R не печатать то, что мне нужно - PullRequest
0 голосов
/ 28 февраля 2019

В R я хотел бы, чтобы элементы в list1 были добавлены в list2

list1 = c(1,2,3,4)
list2 = c(2,4,6,8)

for(i in list1){
  for(j in list2){
    print(i + j)
  }
}

Я ищу цикл для возврата

3
6
9
12

, но он возвращает

3
5
7
4
6
8
5
7
9

как я могу получить его, чтобы вернуть первый предыдущий случай?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019
library(tidyverse)

list1 = c(1,2,3,4)
list2 = c(2,4,6,8)

purrr::walk2(list1, list2, ~print(.x + .y))
[1] 3
[1] 6
[1] 9
[1] 12

list1 это .x и list2 это .y

0 голосов
/ 28 февраля 2019

если вы используете для цикла, мы должны упомянуть, что j-е целое число равно i.

for(i in list1){
  for(j in list2[list1==i]){
    print(i + j)
  }
}
[1] 3
[1] 6
[1] 9
[1] 12
0 голосов
/ 28 февраля 2019

Это классический вопрос и дубликат многих других вопросов.

Каждый цикл for выполняет итерацию.Комментарии отвечают на ваш вопрос, но для понимания ниже приведен пример, который покажет вам «почему» это происходит:

list1 = c(1,2,3,4)
list2 = c(2,4,6,8)
for(i in seq_along(list1)){
  for(j in seq_along(list2)){
    cat("list1[[", i,"]] + list2[[", j,"]] =",list1[[i]],"+",list2[[j]],"=", list1[[i]] + list2[[j]],"\n")
  }
}

Это должно проиллюстрировать, как работает цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...