ЗА функцию в R studio - PullRequest
       1

ЗА функцию в R studio

0 голосов
/ 12 января 2020

Может кто-нибудь объяснить, почему этот код приводит к 15?

k<-0
for(i in 1:3){
  k<-k+1
  for(j in 1:2){
    k<-k+2
  }
}

Ответы [ 5 ]

4 голосов
/ 12 января 2020

Поскольку запись for(i in 1:3) означает «выполните следующие действия для каждого значения от 1 до 3, и, если вы встретите букву i, замените ее на это значение». Как это происходит, ни i, ни j не появляются в теле циклов, но это не мешает циклам выполнять

Так что код расширяется до следующего:

k <- 0
# first outer loop with i = 1
{
  k <- k + 1      # k = 1
  {
    # inner loop runs two times for j = 1 and j = 2
    k <- k + 2    # k = 3
    k <- k + 2    # k = 5
  }
}
# second outer loop with i = 2
{
  k <- k + 1      # k = 6
  {
    # inner loop runs two times for j = 1 and j = 2
    k <- k + 2    # k = 8
    k <- k + 2    # k = 10
  }
}
# third outer loop with i = 3
{
  k <- k + 1      # k = 11
  {
    # inner loop runs two times for j = 1 and j = 2
    k <- k + 2    # k = 13
    k <- k + 2    # k = 15
  }
}

, поэтому сумма всех значений, добавленных к k, равна 15. И вы можете понять, почему нам нужны for циклы!

2 голосов
/ 12 января 2020

Так вот, что он делает;

  1. k <- k+1 приводит к k = 1
  2. Внутренние циклы имеют место, которые повторяются 2 раза каждый раз, добавляя 2 к k
    Таким образом, в первый раз k становится 3, затем 5

Эти два шага повторяются 3 раза (из-за внешнего l oop);

Так что для второго запуска это добавит 1 (5 + 1 = 6), затем он добавит 2 дважды (k = 10)
И для третьего запуска он добавит 1 (10 + 1 = 11), затем он добавит 2 дважды (k = 15)

1 голос
/ 12 января 2020

Внутренний l oop т.е.

  for(j in 1:2){
    k<-k+2
  }

добавляет 2 к k дважды. Таким образом, каждый раз, когда все l oop завершает 4, добавляется к k.

Каждая итерация внешнего l oop т.е.

  k<-k+1
  for(j in 1:2){
    k<-k+2
  }

добавляет 1+ 4 = 5 к k , есть 3 итерации, поэтому внешнее l oop добавляет 3 * 5 = 15 к k.

Начальное значение k равно 0. Итак, конечное значение k будет 0 + 15 = 15.

0 голосов
/ 12 января 2020

Вот полный прогресс

i = 1: k <- k + 1 gives 1
j = 1: k<-k+2 gives 3
j = 2: k<-k+2 gives 5

i = 2: k <- k + 1 gives 6
j = 1: k<-k+2 gives 8
j = 2: k<-k+2 gives 10

i = 3: k <- k + 1 gives 11
j = 1: k<-k+2 gives 13
j = 2: k<-k+2 gives 15

, наконец, вы получите 15

0 голосов
/ 12 января 2020

Итак, у вас есть три цикла i, каждый из которых запускает два цикла j:

in i = 1
 0 + 1 = 1; then j=1, you have 1+2=3 and j=2, you have 3+2=5 ==> k is now 5

in i = 2
  5 + 1 = 6; then j=1, you have 6+2=8 and j=2, you have 8+2=10 ==> k is now 10

in the 3rd loop, i = 3,
 10+1=11; then j=1 gives you 11+2 =13 and j=2 gives 13+2=15 ==> hence k is 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...