如何理解R function()中的可选参数?

时间:2019-05-15 05:48:33

标签: r

我不太了解function()中的可选参数return_sum = TRUE及其在这种情况下的作用。

如果有人可以解释在哪种情况下return_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)

1 个答案:

答案 0 :(得分:0)

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