Как понять необязательный аргумент в функции R ()? - PullRequest
0 голосов
/ 15 мая 2019

Я не совсем понимаю необязательный аргумент 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 голосов
/ 15 мая 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...