Возвращен дополнительный печатный результат "[1] 36" из цикла for: как его удалить? - PullRequest
0 голосов
/ 24 января 2019
#Create a function to print squares of numbers in sequence
squareseq <- function(a) {
   for(i in 1:a) {
      b <- i^2
      result <- print(b)
   }
   return(result)
}

# Call the function supplying 6 as an argument
squareseq(6)

Результат вызова функции выше показан ниже:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
[1] 36

Как сохранить «return (result)», но удалить дублированную строку: «[1] 36»? Итак, я получаю этот результат ниже:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Мой ответ будет здесь старомодным.

Проблема в вашем подходе заключается в том, что сначала вы печатаете значения в цикле for, поэтому при вызове функции она будет печататься в соответствии с аргументом (все числа).Теперь, когда функция выходит из этого цикла, вы возвращаете значение, которое будет возвращать последнее значение переменной с именем result в вашем случае, то есть фактически причина, по которой только последний элемент печатается 2 раза (потому что элемент уже был напечатан ранее и теперь возвращается).

Согласно комментариям @ Роланда, я отредактировал свой ответ сейчас (там, где говорилось, что ничего не возвращает в функции, похоже, не применимо к R).Поскольку обязательно возвращать значение в R, используйте красивое решение @ DiceboyT, используя invisible.

0 голосов
/ 24 января 2019

Использование invisible:

squareseq <- function(a) {
  for(i in 1:a) {
    b <- i^2
    result <- print(b)
  }
  invisible(result)
}

squareseq(6)
#[1] 1
#[1] 4
#[1] 9
#[1] 16
#[1] 25
#[1] 36
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...