Идентифицирующий аргумент имеет нулевую длину ошибки в большой функции - PullRequest
0 голосов
/ 11 марта 2020

Во-первых, я не являюсь автором этих функций - все кредиты go на a4quan. Я публикую этот вопрос на SO, так как мне не повезло получить ответ от автора этих функций. Всего имеется 10 функций, включая функцию gametime, которая вызывает 9 предыдущих функций. Когда я выбрасываю функцию gametime в for-l oop для имитации нескольких матчей между двумя командами, функция в конечном итоге прерывается и выдает ошибку Error in if (shot[1] == TRUE) { : argument is of length zero. Я понимаю, что это говорит мне, но я не могу на всю жизнь понять, ПОЧЕМУ. Функция gametime прерывает вызов функции shoot в следующих двух фрагментах кода: shot = shoot(a[1:22,shoota],Mod) и shot = shoot(b[1:22,shoota],Mod). Я также пытался уловить ошибку, но все, что я вижу, это объект NULL shot, среди других объектов.

Любая помощь и руководство приветствуются. Спасибо!

REPREX И ВСЕ ФУНКЦИИ

## nba game sim (a4quan)
KL = c("Kyle Lowry",0.03,0.161,0,0,963,169,82,52,52,608,0,0.657,0.293,0.327,0.346,0.395,0.138-0.138/4,0.854,0.309,0.267,0.643)
DD = c("DeMar DeRozan",0.025,0.104,0,0,1452,287,247,349,271,298,31,0.672,0.466,0.441,0.402,0.315,0.198-0.198/4,0.825,0.25,0.263,0.674)
OG = c("OG Anunoby",0.034,0.104,0,0,358,128,17,5,5,203,49,0.695,0.235,0.2,0,0.374,0.0895-0.0895/4,0.629,0.05,0.711,0.528)
SI = c("Serge Ibaka",0.043,0.21,0,0,806,129,127,124,122,304,47,0.736,0.480,0.508,0.5,0.365,0.0755-0.0755/4,0.797,0.044,0.699,0.953)
JV = c("Jonas Valanciunas",0.121,0.303,0,0,705,310,237,65,17,76,75,0.71,0.477,0.4,0.706,0.408,0.01535-0.01535/4,0.806,0.075,0.636,0.9)
raps = matrix(c(KL,DD,OG,SI,JV),22,5)
row.names(raps) <- c("Name","oreb%","dreb%","oreb","dreb","FGA","rim","3to10","10to16","16to3","3","dunk","rimc","3to10c","10to16c","16to3c","3c","FTr","FTc","ast%","2ast","3ast")

KLbox = c("Kyle Lowry",0,0,0,0,0,0,0,0,0,0,0)
DDbox = c("DeMar DeRozan",0,0,0,0,0,0,0,0,0,0,0)
OGbox = c("OG Anunoby",0,0,0,0,0,0,0,0,0,0,0)
SIbox = c("Serge Ibaka",0,0,0,0,0,0,0,0,0,0,0)
JVbox = c("Jonas Valanciunas",0,0,0,0,0,0,0,0,0,0,0)
rapsBox = matrix(c(KLbox,DDbox,OGbox,SIbox,JVbox),12,5)
row.names(rapsBox) <- c("Name","FG","FGA","3FG","3FGA","FT","FTA","PTS","REB","DREB","OREB","AST")

CP = c("Chris Paul",0.023,0.167,0,0,830,79,91,182,88,390,0,0.671,0.451,0.5,0.557,0.379,0.1385-0.1385/4,0.919,0.409,0.081,0.243)
JH = c("James Harden",0.018,0.152,0,0,1496,408,176,106,58,744,20,0.654,0.347,0.434,0.362,0.367,0.251-0.251/4,0.858,0.451,0.088,0.26)
LM = c("Luc Mbah a Moute",0.016,0.117,0,0,345,139,26,0,7,173,25,0.676,0.346,0,0,0.364,0.1375-0.1375/4,0.684,0.05,0.777,0.984)
TA = c("Trevor Ariza",0.017,0.129,0,0,671,149,34,5,7,476,20,0.631,0.176,0,0.143,0.363,0.0685-0.0685/4,0.854,0.068,0.592,0.953)
CC = c("Clint Capela",0.135,0.308,0,0,697,561,123,12,0,1,244,0.717,0.382,0.5,0,0,0.19-0.19/4,0.56,0.057,0.819,0)
rockets = matrix(c(CP,JH,LM,TA,CC),22,5)
row.names(rockets) <- c("Name","oreb%","dreb%","oreb","dreb","FGA","rim","3to10","10to16","16to3","3","dunk","rimc","3to10c","10to16c","16to3c","3c","FTr","FTc","ast%","2ast","3ast")

CPbox = c("Chris Paul",0,0,0,0,0,0,0,0,0,0,0)
JHbox = c("James Harden",0,0,0,0,0,0,0,0,0,0,0)
LMbox = c("Luc Mbah a Moute",0,0,0,0,0,0,0,0,0,0,0)
TAbox = c("Trevor Ariza",0,0,0,0,0,0,0,0,0,0,0)
CCbox = c("Clint Capela",0,0,0,0,0,0,0,0,0,0,0)
rocketsBox = matrix(c(CPbox,JHbox,LMbox,TAbox,CCbox),12,5)
row.names(rocketsBox) <- c("Name","FG","FGA","3FG","3FGA","FT","FTA","PTS","REB","DREB","OREB","AST")

## Generates a random shotclock time
shotClock = function(mod) {
  ## Generates a random variable from 0 to 24 to represent when shot is taking place.
  if (mod == 0) {
    if (runif(1) < 0.15) {
      return(ceiling(8*runif(1)))
    } else {
      return(ceiling(16*runif(1)) + 8)
    }
    # return(ceiling(16*runif(1)) + 8)
  }
  ## In the case of an offensive rebound, generates a time more accurate to a OREB
  else {
    if (runif(1) < 0.66) {
      return(ceiling(3*runif(1)))
    } else {
      return(ceiling(11*runif(1)) + 3)
    }
  }
}

## Converts integer to a time based display.
integerToTime <- function(time) {
  Mins = time %/% 60
  Secs = time %% 60

  if (Mins == 0) {
    StrMins = "00"
  } else if (Mins < 10) {
    StrMins = paste("0",toString(Mins),sep="")
  } else {
    StrMins = toString(Mins)
  }

  if (Secs == 0) {
    StrSecs = "00"
  } else if (Secs < 10) {
    StrSecs = paste("0",toString(Secs),sep="")
  } else {
    StrSecs = toString(Secs)
  }

  StrTime = paste(StrMins, ":", StrSecs, sep="")
  return(StrTime)
}

nameWhiteSpace <- function(Player) {
  addWhite = 20 - nchar(Player["Name"])
  i = 0
  while (i < addWhite) {
    cat(" ")
    i = i + 1
  }
  return(addWhite)
}

shooter <- function(Team,Mod) {
  # Team <- a
  if (Mod[3] != 0) {
    if (runif(1) < 0.7) {
      return(Mod[3])
    }
  }
  FGattempted = sum(as.numeric(Team["FGA",1:5]))
  x = runif(1)
  for (i in 1:5) {
    if (x < sum(as.numeric(Team["FGA",1:i]))/FGattempted) {
      return(i)
    }
  }
}

and1Chance <- function(Dist) {
  if (Dist < 5) {
    return((1/800)*((Dist-5)^2)+0.03)
  } else if (Dist < 18) {
    return((-3/2500)*(Dist-30))
  } else if (Dist < 30) {
    return((1/33000)*((Dist-30)^2)+0.01)
  } else {
    return(0.001)
  }
}

freeThrows <- function(Player,Dist) {
  firstFreeThrow = 0
  y = runif(1)
  cat(Player[1], "draws a foul on a", Dist, "foot field goal.\n")
  if (runif(1) < as.numeric(Player["FTc"])) {
    cat("      ", Player[1], "makes free throw", 1, "of 2.")
    nameWhiteSpace(Player)
    firstFreeThrow = 1
    cat("                Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4))
    if (Mod[1] == 0) {
      cat(" (",Mod[5]+1,"-",Mod[6],")\n",sep="")
    } else {
      cat(" (",Mod[5],"-",Mod[6]+1,")\n",sep="")
    }
  } else {
    cat("      ", Player[1], "misses free throw", 1, "of 2.")
    nameWhiteSpace(Player)
    cat("               Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4),"\n")
  }
  if (runif(1) < as.numeric(Player["FTc"])) {
    cat("      ", Player[1], "makes free throw", 2, "of 2.")
    nameWhiteSpace(Player)
    cat("                Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4))
    return(c(TRUE,1+firstFreeThrow))
  } else {
    cat("      ", Player[1], "misses free throw", 2, "of 2.")
    nameWhiteSpace(Player)
    cat("               Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4),"\n")
    return(c(FALSE,0+firstFreeThrow))
  }
}

shoot <- function(Player,Mod) {
  NameChange = 20 - nchar(Player["Name"])
  x = runif(1)

  if (Mod[2] == 1) {
    if (runif(1) < Mod[4]) {
      while (x > as.numeric(Player["rim"])/as.numeric(Player["FGA"])) {
        x = runif(1)
      }
    }
  }


  z = runif(1)
  if (z < as.numeric(Player["FTr"])/(1+as.numeric(Player["FTr"]))) {
    firstFreeThrow = 0
    y = runif(1)
    ShotDistance = floor(3*y)
    cat(Player[1], "draws a foul on a", ShotDistance, "foot field goal.\n")
    if (runif(1) < as.numeric(Player["FTc"])) {
      cat("      ", Player[1], "makes free throw", 1, "of 2.")
      nameWhiteSpace(Player)
      firstFreeThrow = 1
      cat("                Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4))
      if (Mod[1] == 0) {
        cat(" (",Mod[5]+1,"-",Mod[6],")\n",sep="")
      } else {
        cat(" (",Mod[5],"-",Mod[6]+1,")\n",sep="")
      }
    } else {
      cat("      ", Player[1], "misses free throw", 1, "of 2.")
      nameWhiteSpace(Player)
      cat("               Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4),"\n")
    }
    if (runif(1) < as.numeric(Player["FTc"])) {
      cat("      ", Player[1], "makes free throw", 2, "of 2.")
      nameWhiteSpace(Player)
      cat("                Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4))
      return(c(TRUE,1+firstFreeThrow,1))
    } else {
      cat("      ", Player[1], "misses free throw", 2, "of 2.")
      nameWhiteSpace(Player)
      cat("               Likelihood =", format(round(as.numeric(Player["FTc"]), 4), nsmall=4),"\n")
      return(c(FALSE,0+firstFreeThrow,1))
    }

  }
  else if (x < as.numeric(Player["rim"])/as.numeric(Player["FGA"])) {
    y = runif(1)
    ShotDistance = floor(3*y)
    TrueShot = 3*y

    Lowrange = (as.numeric(Player["rimc"]) + as.numeric(Player["3to10c"]))/2
    Toprange = as.numeric(Player["rimc"])+abs(as.numeric(Player["rimc"])-Lowrange)
    Aval = 9/(Toprange - Lowrange)
    ShotPercent = (1/Aval)*(TrueShot-3)^2+Lowrange

    rand0 = runif(1)
    if (runif(1) < ShotPercent) {
      if (y < as.numeric(Player["dunk"])/as.numeric(Player["rim"])) {
        cat(Player[1], "makes a", ShotDistance, "foot dunk.")
        nameWhiteSpace(Player)
        cat("                    Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      } else if (rand0 < 0.05) {
        cat(Player[1], "makes a", ShotDistance, "foot field goal.")
        nameWhiteSpace(Player)
        cat("              Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      } else {
        cat(Player[1], "makes a", ShotDistance, "foot layup.")
        nameWhiteSpace(Player)
        cat("                   Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      }
      return(c(TRUE,2,0))
    } else {
      if (y < as.numeric(Player["dunk"])/as.numeric(Player["rim"])) {
        cat(Player[1], "misses a", ShotDistance, "foot dunk.")
        nameWhiteSpace(Player)
        cat("                   Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      } else if (rand0 < 0.05) {
        cat(Player[1], "misses a", ShotDistance, "foot field goal.")
        nameWhiteSpace(Player)
        cat("             Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      } else {
        cat(Player[1], "misses a", ShotDistance, "foot layup.")
        nameWhiteSpace(Player)
        cat("                  Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      }
      return(c(FALSE,0,0))
    }
  }
  else if (x < sum(as.numeric(Player[7:8]))/as.numeric(Player["FGA"])) {
    y = runif(1)
    ShotDistance = floor(7*y)+3
    TrueShot = 7*y+3

    Toprange = (as.numeric(Player["rimc"]) + as.numeric(Player["3to10c"]))/2
    Lowrange = (as.numeric(Player["3to10c"]) + as.numeric(Player["10to16c"]))/2
    Aval = 49/(Toprange - Lowrange)
    ShotPercent = (1/Aval)*(TrueShot-10)^2+Lowrange

    rand0 = runif(1)
    if (runif(1) < ShotPercent) {
      if ((TrueShot < 4.5) && (1.5*rand0 < TrueShot - 3)) {
        cat(Player[1], "makes a", ShotDistance, "foot layup.")
        nameWhiteSpace(Player)
        cat("                   Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      } else {
        cat(Player[1], "makes a", ShotDistance, "foot field goal.")
        nameWhiteSpace(Player)
        cat("              Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      }
      return(c(TRUE,2,0))
    } else {
      if ((TrueShot < 4.5) && (1.5*rand0 < TrueShot - 3)) {
        cat(Player[1], "misses a", ShotDistance, "foot layup.")
        nameWhiteSpace(Player)
        cat("                  Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      } else {
        cat(Player[1], "misses a", ShotDistance, "foot field goal.")
        nameWhiteSpace(Player)
        cat("             Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      }
      return(c(FALSE,0,0))
    }
  }
  else if (x < sum(as.numeric(Player[7:9]))/as.numeric(Player["FGA"])) {
    y = runif(1)
    ShotDistance = floor(6*y)+10
    TrueShot = 6*y+3

    Toprange = (as.numeric(Player["3to10c"]) + as.numeric(Player["10to16c"]))/2
    Lowrange = (as.numeric(Player["10to16c"]) + as.numeric(Player["16to3c"]))/2
    Aval = 36/(Toprange - Lowrange)
    ShotPercent = (1/Aval)*(TrueShot-16)^2+Lowrange

    if (runif(1) < ShotPercent) {
      cat(Player[1], "makes a", ShotDistance, "foot field goal.")
      nameWhiteSpace(Player)
      cat("             Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      return(c(TRUE,2,0))
    } else {
      cat(Player[1], "misses a", ShotDistance, "foot field goal.")
      nameWhiteSpace(Player)
      cat("            Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      return(c(FALSE,0,0))
    }
  }
  else if (x < sum(as.numeric(Player[7:10]))/as.numeric(Player["FGA"])) {
    Shooting = c(16,17,18,19,20,21,22)
    Func = (1/360)*(Shooting-22)^2+0.1
    rand = runif(1)
    while (rand > sum(Func[1:7])) {
      rand = runif(1)
    }
    i = 1
    while (rand > sum(Func[1:i])) {
      i = i + 1
    }

    ShotDistance = (i - 1) + 16
    TrueShot = ShotDistance + runif(1)

    Toprange = (as.numeric(Player["10to16c"]) + as.numeric(Player["16to3c"]))/2
    Lowrange = (as.numeric(Player["16to3c"]) + as.numeric(Player["3c"]))/2
    Aval = 49/(Toprange - Lowrange)
    ShotPercent = (1/Aval)*(TrueShot-23)^2+Lowrange

    if (runif(1) < ShotPercent) {
      cat(Player[1], "makes a", ShotDistance, "foot field goal.")
      nameWhiteSpace(Player)
      cat("             Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      return(c(TRUE,2,0))
    } else {
      cat(Player[1], "misses a", ShotDistance, "foot field goal.")
      nameWhiteSpace(Player)
      cat("            Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      return(c(FALSE,0,0))
    }
  }
  else if (x < sum(as.numeric(Player[7:11]))/as.numeric(Player["FGA"])) {
    S = rexp(1,2.5)
    while (S >= 1.5) {
      S = rexp(1,2.5)
    }
    ShotDistance = floor(6*S)+23
    TrueShot = 6*S+23

    Toprange = (as.numeric(Player["16to3c"]) + as.numeric(Player["3c"]))/2
    Lowrange = as.numeric(Player["3c"])-abs(as.numeric(Player["3c"])-as.numeric(Player["16to3c"]))
    Aval = 25/(Toprange - Lowrange)
    #cat(TrueShot,Toprange,Aval)
    ShotPercent = (1/Aval)*-(TrueShot-23)^2+Toprange

    if (runif(1) < ShotPercent) {
      cat(Player[1], "makes a", ShotDistance, "foot three point field goal.")
      nameWhiteSpace(Player)
      cat(" Likelihood =", format(round(ShotPercent, 4), nsmall=4))
      return(c(TRUE,3,3))
    } else {
      cat(Player[1], "misses a", ShotDistance, "foot three point field goal.")
      nameWhiteSpace(Player)
      cat("Likelihood =", format(round(ShotPercent, 4), nsmall=4),"\n")
      return(c(FALSE,0,3))
    }
  }

}

rebounding <- function(a,b) {
  d = 1
  x = runif(1)
  reboundSum = sum(as.numeric(b[3,1:5])) + sum(as.numeric(a[2,1:5]))
  for (i in 1:5) {
    if (x < sum(as.numeric(b[3,1:i]))/reboundSum) {
      cat(b[1,i], "defensive rebound.                     ")
      nameWhiteSpace(b[1:19,i])
      cat(" Likelihood =",format(round(as.numeric(b[3,i])/reboundSum, 4), nsmall=4), "\n")
      d = 0
      return(c(i,"dreb"))
      break
    }
  }
  if (d != 0) {
    defSum = sum(as.numeric(b[3,1:5]))/reboundSum
    for (j in 1:5) {
      if (x < defSum + sum(as.numeric(a[2,1:j]))/reboundSum) {
        cat(a[1,j], "offensive rebound.                     ")
        nameWhiteSpace(a[1:19,j])
        cat(" Likelihood =",format(round(as.numeric(b[2,i])/reboundSum, 4), nsmall=4), "\n")
        return(c(j,"oreb"))
        break
      }
    }
  }
  cat(i,j)
}

# ShotType is either a 2 or a 3
assisting <- function(Team,Player,ShotType) {
  y = 0
  z = 0
  if (ShotType == 2) {
    if (runif(1) < as.numeric(Player[21])) {
      x = runif(1)
      assistSum = sum(as.numeric(Team[20,1:5])) - sum(as.numeric(Player[20]))
      for (i in 1:5) {
        if (Player[1] == Team[1,i]) {
          y = as.numeric(Player[20])
        }
        else if (x < ((sum(as.numeric(Team[20,1:i]))-y)/assistSum)) {
          cat("      ",Team[1,i], "assists.","\n")
          z = 1
          break
        }
      }
    }
  }
  else {
    if (runif(1) < as.numeric(Player[22])) {
      x = runif(1)
      assistSum = sum(as.numeric(Team[20,1:5])) - sum(as.numeric(Player[20]))
      for (i in 1:5) {
        if (Player[1] == Team[1,i]) {
          y = as.numeric(Player[20])
        }
        else if (x < ((sum(as.numeric(Team[20,1:i]))-y)/assistSum)) {
          cat("      ",Team[1,i], "assists.","\n")
          z = 1
          break
        }
      }
    }
  }
  if (z == 1) {
    return(i)
  } else {
    return(0)
  }
}

gametime <- function(a,b,aBox,bBox) {
  # Team a starts
  time = 720*3
  teamA = 0
  teamB = 0
  Mod = c(0,0,0,1,0)

  while (time > 0) {
    cycle = 0
    t = shotClock(Mod[2])
    if (time - t < 0) {
      t = time
    }
    cat(integerToTime(time - t)," ")
    time = time - t
    if (Mod[1] == 0) {
      #cat(Mod,"   ")
      shoota = shooter(a,Mod)
      shot = shoot(a[1:22,shoota],Mod)   # ERROR RESULTING FROM THIS CALL TO THE SHOOT(...) FUNCTION
      teamA = teamA + shot[2]
      if (shot[1] == TRUE) { 
        Mod = c(1,0,0,1,teamA,teamB)
        cat(" (",teamA,"-",teamB,")\n",sep="")
        if (shot[2] == 2) {
          ast = assisting(a,a[1:22,shoota],2)
          if (ast != 0 && shot[3] != 1) {
            aBox[12,ast] = as.numeric(aBox[12,ast]) + 1
          }
        }
        else if (shot[2] == 3 && shot[3] != 1) {
          aBox[4,shoota] = as.numeric(aBox[4,shoota]) + 1
          aBox[5,shoota] = as.numeric(aBox[5,shoota]) + 1
          ast = assisting(a,a[1:22,shoota],3)
          if (ast != 0) {
            aBox[12,ast] = as.numeric(aBox[12,ast]) + 1
          }
        }
        if (as.numeric(shot[3]) == 1) {
          aBox[6,shoota] = as.numeric(aBox[6,shoota]) + as.numeric(shot[2])
          aBox[7,shoota] = as.numeric(aBox[7,shoota]) + 2
          aBox[8,shoota] = as.numeric(aBox[8,shoota]) + as.numeric(shot[2])
        }
        else {

          aBox[8,shoota] = as.numeric(aBox[8,shoota]) + as.numeric(shot[2])
          aBox[2,shoota] = as.numeric(aBox[2,shoota]) + 1
          aBox[3,shoota] = as.numeric(aBox[3,shoota]) + 1

        }
      } else {
        if (as.numeric(shot[3]) == 1) {
          aBox[6,shoota] = as.numeric(aBox[6,shoota]) + as.numeric(shot[2])
          aBox[7,shoota] = as.numeric(aBox[7,shoota]) + 2
          aBox[8,shoota] = as.numeric(aBox[8,shoota]) + as.numeric(shot[2])
        }
        if (shot[3] == 3) {
          aBox[5,shoota] = as.numeric(aBox[5,shoota]) + 1
        }
        aBox[3,shoota] = as.numeric(aBox[3,shoota]) + 1
        cat(integerToTime(time - 1)," ")
        time = time - 1
        reb = rebounding(a,b)
        if (reb[2] == "dreb") {
          bBox[10,as.numeric(reb[1])] = as.numeric(bBox[10,as.numeric(reb[1])]) + 1
          bBox[9,as.numeric(reb[1])] = as.numeric(bBox[9,as.numeric(reb[1])]) + 1
          Mod = c(1,0,0,1,teamA,teamB)
        } else {
          aBox[11,as.numeric(reb[1])] = as.numeric(aBox[11,as.numeric(reb[1])]) + 1
          aBox[9,as.numeric(reb[1])] = as.numeric(aBox[9,as.numeric(reb[1])]) + 1
          Mod = c(0,1,as.numeric(reb[1]),runif(1),teamA,teamB)
        }
      }
      cycle = 1
    }
    if (Mod[1] == 1 && cycle == 0) {
      #cat(Mod,"   ")
      shoota = shooter(b,Mod)
      shot = shoot(b[1:22,shoota],Mod)   # ERROR RESULTING FROM THIS CALL TO THE SHOOT(...) FUNCTION
      teamB = teamB + shot[2]
      if (shot[1] == TRUE) {       
        Mod = c(0,0,0,1,teamA,teamB)
        cat(" (",teamA,"-",teamB,")\n",sep="")
        if (shot[2] == 2) {
          ast = assisting(b,b[1:22,shoota],2)
          if (ast != 0 && shot[3] != 1) {
            bBox[12,ast] = as.numeric(bBox[12,ast]) + 1
          }
        }
        else if (shot[2] == 3) {
          bBox[4,shoota] = as.numeric(bBox[4,shoota]) + 1
          bBox[5,shoota] = as.numeric(bBox[5,shoota]) + 1
          ast = assisting(b,b[1:22,shoota],3)
          if (ast != 0 && shot[3] != 1) {
            bBox[12,ast] = as.numeric(bBox[12,ast]) + 1
          }
        }
        if (as.numeric(shot[3]) == 1) {
          bBox[6,shoota] = as.numeric(bBox[6,shoota]) + as.numeric(shot[2])
          bBox[7,shoota] = as.numeric(bBox[7,shoota]) + 2
          bBox[8,shoota] = as.numeric(bBox[8,shoota]) + as.numeric(shot[2])
        }
        else
        {
          bBox[8,shoota] = as.numeric(bBox[8,shoota]) + as.numeric(shot[2])
          bBox[2,shoota] = as.numeric(bBox[2,shoota]) + 1
          bBox[3,shoota] = as.numeric(bBox[3,shoota]) + 1
        }
      } else {
        if (as.numeric(shot[3]) == 1) {
          bBox[6,shoota] = as.numeric(bBox[6,shoota]) + as.numeric(shot[2])
          bBox[7,shoota] = as.numeric(bBox[7,shoota]) + 2
          bBox[8,shoota] = as.numeric(bBox[8,shoota]) + as.numeric(shot[2])
        }
        if (shot[3] == 3) {
          bBox[5,shoota] = as.numeric(bBox[5,shoota]) + 1
        }
        bBox[3,shoota] = as.numeric(bBox[3,shoota]) + 1
        if (time == 0) {
          cat(integerToTime(time)," ")
        } else {
          cat(integerToTime(time - 1)," ")
        }
        time = time - 1
        reb = rebounding(b,a)
        if (reb[2] == "dreb") {
          aBox[10,as.numeric(reb[1])] = as.numeric(aBox[10,as.numeric(reb[1])]) + 1
          aBox[9,as.numeric(reb[1])] = as.numeric(aBox[9,as.numeric(reb[1])]) + 1
          Mod = c(0,0,0,1,teamA,teamB)
        } else {
          bBox[11,as.numeric(reb[1])] = as.numeric(bBox[11,as.numeric(reb[1])]) + 1
          bBox[9,as.numeric(reb[1])] = as.numeric(bBox[9,as.numeric(reb[1])]) + 1
          Mod = c(1,1,as.numeric(reb[1]),runif(1),teamA,teamB)
        }
      }
    }
  }
  print(aBox);
  print(bBox);
  if (teamA > teamB) {
    cat("Raptors",teamA,"-",teamB,"Rockets")
  } else {
    cat("Rockets",teamB,"-",teamA,"Raptors")
  }
  out <- t(aBox)
  out <- data.frame(out)
  rownames(out) <- NULL
  return(out)
}

Запуск нескольких игровых симуляций

out <- list()
for (i in 1:100) {
  out[[i]] <-gametime(raps,rockets,rapsBox,rocketsBox)
}

Error in if (shot[1] == TRUE) { : argument is of length zero
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...