R 打印函数并将函数指定给变量,然后打印变量以提供不同的输出

R 打印函数并将函数指定给变量,然后打印变量以提供不同的输出,r,function,R,Function,我已经用R写了下面的代码。有人能解释为什么执行一个函数并将函数赋给一个变量并打印该变量会得到不同的结果吗 请参阅下面的代码 fc <- function(num) { hello <- "Hello, world!\n" for(i in seq_len(num)) { cat(hello) } chars <- nchar(hello) * num chars } 现在我将f

我已经用R写了下面的代码。有人能解释为什么执行一个函数并将函数赋给一个变量并打印该变量会得到不同的结果吗

请参阅下面的代码

fc <- function(num) {
      hello <- "Hello, world!\n"
      for(i in seq_len(num)) {
          cat(hello)
          }
      chars <- nchar(hello) * num
      chars
      }
现在我将fc3分配给一个变量alpha,在打印alpha时,查看输出是什么

alpha<- fc(3)
Hello, world!
Hello, world!
Hello, world!

> print(alpha)
[1] 42
打印或cat与退货不同


print或cat只在控制台中打印值,而return value是函数实际返回的值,可以通过将其分配给对象来存储。1您不是将函数分配给变量,而是将调用它的结果分配给变量。2您说您看到了不同的结果,但您打印的结果在这两种情况下都是相同的。@KonradRudolph,那么您的意思是仅将最终返回语句分配给变量。我想知道alpha R不像其他语言那样有“return语句”,但您的描述在其他方面是正确的:最后一个表达式的值是函数返回的值。cat函数与此无关:它不返回值,而是直接打印它。我认为在混合中添加return=premature函数终止会增加混乱,而不是清晰。正如我在其他评论中所说,R函数没有“返回语句”,它们只是有值。这种思维模式更接近于数学中函数的定义,对于初学者来说应该更容易理解,除非他们被命令式编程语言“污染”。也许是的,但也有另一种观点认为,最好在所有函数中都有一个显式的返回,这样您就可以确切地知道返回的是什么,而不是依赖于函数的最后一行。虽然我相信这两种方法都是主观的。
alpha<- fc(3)
Hello, world!
Hello, world!
Hello, world!

> print(alpha)
[1] 42
fc <- function(num) {
   hello <- "Hello, world!\n"
   cat(rep(hello, num))
   cat('Printing more\n')
   print('new print')
   return(nchar(hello) * num)
}

a <- fc(3)
#Hello, world!
# Hello, world!
# Hello, world!
#Printing more
#[1] "new print"

a
#[1] 42