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