Функция, возвращающая номер вместо команды? - PullRequest
0 голосов
/ 19 июня 2020

Моя основная цель - создать коэффициенты, основанные на счете команды, и вернуть "смоделированного" победителя. Но всякий раз, когда я выбираю победителя (Blue_Jays, Mariners), он возвращает [1] 100, что является правильным значением для Blue Jays, но я хочу, чтобы он возвращал название команды.

Blue_Jays <- 100
Mariners <- 64
winner(Blue_Jays, Mariners)
winner <- function(team_one, team_two) {
  team_one_score <- team_one / (team_one + team_two)
  team_two_score <- team_two / (team_one + team_two)
  winner_score <- runif(1, min = 0, max = 1)
  if (team_one_score > team_two_score & winner_score <= team_one_score) {
      winner <- team_one}
  if (team_one_score > team_two_score & winner_score >= team_one_score) {
    winner <- team_two}
  if (team_two_score > team_one_score & winner_score <= team_two_score) {
    winner <- team_two}
  if (team_two_score > team_one_score & winner_score >= team_two_score) {
    winner <- team_one}
  if (team_one_score == team_two_score & winner_score >= team_two_score) {
    winner <- team_one}
  if (team_one_score == team_two_score & winner_score >= team_one_score) {
    winner <- team_two}
  return(winner)
  }

1 Ответ

2 голосов
/ 19 июня 2020

Введите название команды, используя deparse и substitute.

winner <- function(team_one, team_two) {

   team_name1 <- deparse(substitute(team_one))
   team_name2 <- deparse(substitute(team_two))
   team_one_score <- team_one / (team_one + team_two)
   team_two_score <- team_two / (team_one + team_two)
   winner_score <- runif(1, min = 0, max = 1)

   if (team_one_score > team_two_score & winner_score <= team_one_score)
          winner <- team_name1
   if (team_one_score > team_two_score & winner_score >= team_one_score) 
           winner <- team_name2
   if (team_two_score > team_one_score & winner_score <= team_two_score) 
           winner <- team_name2
   if (team_two_score > team_one_score & winner_score >= team_two_score) 
           winner <- team_name1
   if (team_one_score == team_two_score & winner_score >= team_two_score) 
           winner <- team_name1
   if (team_one_score == team_two_score & winner_score >= team_one_score) 
           winner <- team_name2
   return(winner)
}

set.seed(213)
Blue_Jays <- 100
Mariners <- 64
winner(Blue_Jays, Mariners)
#[1] "Blue_Jays"

Возможно, можно упростить / удалить некоторые if условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...