【问题标题】:Understand optional argument in R functions理解 R 函数中的可选参数
【发布时间】:2019-10-02 04:37:10
【问题描述】:

我不太明白 function() 中的可选参数 return_sum=TRUE 以及它在这种情况下的作用。

如果有人能解释在什么情况下会返回_sum==TRUE,那就太好了。

linkedin <- c(16, 9, 13, 5, 2, 17, 14)
facebook <- c(17, 7, 5, 16, 8, 13, 14)
interpret <- function(num_views) {
  if (num_views > 15) {
    print("You're popular!")
    return(num_views)
  } else {
    print("Try to be more visible!")
    return(0)
  }
}
interpret_all <- function(views, return_sum=TRUE) {
  count <- 0

  for (v in views) {count<-count+interpret(v)

  }

  if (return_sum==TRUE) {return(count)

  } else {NULL

  }
}

interpret_all(linkedin)
interpret_all(facebook)

【问题讨论】:

    标签: r function optional-arguments


    【解决方案1】:

    return_sum 是函数interpret_all 的参数,其默认值为TRUE,因此如果您不向其传递任何值,则将其视为TRUE。如果您将print 语句注释掉,差异将很容易看出

    interpret <- function(num_views) {
       if (num_views > 15) {
         #print("You're popular!")
         return(num_views)
       } else {
         #print("Try to be more visible!")
         return(0)
        }
    }
    
    interpret_all <- function(views, return_sum=TRUE) {
        count <- 0
        for (v in views) count<- count + interpret(v)
        if (return_sum) return(count) else NULL
    }
    

    现在,看看区别

    interpret_all(linkedin)
    #[1] 33
    interpret_all(linkedin, FALSE)
    #NULL
    interpret_all(linkedin, TRUE)
    #[1] 33
    

    根据您当前的逻辑,只需添加一点,您就可以通过最小化代码行数将函数简化为一个

    interpret_all <- function(views, return_sum=TRUE) {
       if (return_sum) return(sum(views[views > 15])) else NULL
    }
    

    这仍然会给出相同的结果

    interpret_all(linkedin, TRUE)
    #[1] 33
    interpret_all(linkedin, FALSE)
    #NULL
    

    【讨论】:

    • interpret_all 还会根据值打印出所有的 cmets(“你很受欢迎”、“尝试更显眼”)。
    • @ChengQuincy 是的,所以您可以保持函数和打印语句不变。要点是调用函数interpret_all时传递了return_sum,如果没有传递任何内容,则默认值为TRUE
    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2019-03-17
    • 2021-11-29
    • 1970-01-01
    • 2017-05-26
    • 2019-05-07
    相关资源
    最近更新 更多