为什么这两个功能不同?

时间:2018-02-23 00:04:53

标签: r

strrev =

        function(x)
        paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")

VS

strrev <- function(x)
          {paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
          }

为什么两种方式都有效?定义函数时,花括号不是强制性的吗? 我是R的新手,所以请放轻松我:(

1 个答案:

答案 0 :(得分:1)

R而言,功能完全相同。

strrev = function(x)
         paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
strrev(1)
# [1] "1"

strrev <- function(x) {
            paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
          }
strrev(1)
# [1] "1"

默认情况下,function将读取第一行(或大括号中的任何内容)并返回最后一行。

例如,在这种情况下,如果我们添加一个没有花括号的行,只有第一行传递给函数,第二行只是执行:

strrev = function(x)
         paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
         print("do something else")
# [1] "do something else"         
strrev(1)
# [1] "1"

我们可以用大括号

隔离所有这些
strrev <- function(x) {
            paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
            print("do something else")
          }
strrev(1)
#[1] "do something else"

但是,尽管第一行(paste(...))在函数内执行,但只返回最后一行(print(...))。要实际执行这两项操作,您可以在函数中使用return()。请注意,执行退出return处的函数。在此示例中,不执行最后一个print()

strrev <- function(x) {
            y <- paste(substring(x,nchar(x):1,nchar(x):1), collapse = "")
            print("do something else")
            return(y)
            print("execution already exit!")
          }
strrev(1)
#[1] "do something else"
#[1] "1"

作为“良好做法”建议,最新格式始终是最佳格式(即您知道执行的内容和返回的内容)。