从for循环返回了额外的打印结果“ [1] 36”:如何删除它?

时间:2019-01-23 23:21:39

标签: r

#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

如何保留“返回(结果)”但删除重复的行:“ [1] 36”?所以我在下面得到这个结果:

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

2 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:2)

在这里,我的回答将是过时的理论。

方法中的问题是,首先要在for循环中打印值,因此,每当调用函数时,它将按参数(所有数字)打印。现在,当函数退出该循环时,您将返回一个值,该值将返回您情况下名为result的变量的最新值,这实际上是仅最后一个项目被打印2次的实际原因(因为该项目先前已经被打印并且现在被返回)。

根据@Roland的评论,我现在已经编辑了答案(它说不返回任何函数,似乎不适用于R)。由于必须返回R中的值,因此请使用@DiceboyT的不错的解决方案,使用invisible