R/nbaOptimizerFunction.R

Defines functions nbaOptimizer

Documented in nbaOptimizer

#' nbaOptimizerFunction
#'
#' @param modelDate date
#' @param gameSlate slate
#' @param lineUps #lineups
#' @param bans exclude
#' @param locks include
#' @param sameDay optimizing for same day as running function? T/F
#' @param cookie fantasyLabs Cookies
#' @param dCookies draftkings Cookies
#' @param optModel regression proj model for lineups overall
#' @param projectionSrc x("xgb","cubist")
#' @param nbaModel nbaranger2
#' @param labModel Money
#' @param zeroOwnModel "nbaZeroOwngbmnba"
#' @param labZeroModel "Contrarians"
#'
#' @return lineups
#' @export
#'
#' @examples nbaOptimizer(modelDate="11_10_2018",gameSlate="Main",sameDay=TRUE,optModel="optTrainranger",lineUps=200L,bans=NULL,locks=c(""),saveNameAdd="zeroRussellAndFlow",cookie=nbaCookies,dCookies=dkCookies)
nbaOptimizer<-function(modelDate="11_15_2018",gameSlate="Main",sameDay=TRUE,projectionSrc="xgb",optModel="optTrainranger",lineUps=200L,bans=NULL,locks=c(""),nbaModel="nbaranger2",labModel="Money",zeroOwnModel="nbaZeroOwngbmnba",labZeroModel="Contrarians",cookie=nbaCookies,dCookies=dkCookies){

  require(coach, quietly = TRUE,warn.conflicts = F)

  #check for draftkings Cookies
  if(!exists("dkCookies")){
    readline("missing Cookies, attempting to get them now!")
    dkCookies<-rDailyFantasy::labsCookies()
    dCookies<-dkCookies$dk

    #assign("nbaCookies",nbaCookies$labs,envir = .GlobalEnv)
    assign("dkCookies",dkCookies$dk,envir = .GlobalEnv)
  }

  hmDir<-getwd()

  modelCheck<-list(ls())
  if(optModel %in% modelCheck[[1]]==FALSE){
    optModel<-rDailyFantasy::loadRData(paste0("~/NBA_Daily/machineLearning/algos/",optModel,".rda"))
  }

  if(nbaModel %in% modelCheck[[1]]==FALSE){
    nbaModel<-rDailyFantasy::loadRData(paste0("~/NBA_Daily/machineLearning/algos/",nbaModel,".rda"))
  }

  if(zeroOwnModel %in% modelCheck[[1]]==FALSE){
    zeroOwnModel<-rDailyFantasy::loadRData(paste0("~/NBA_Daily/machineLearning/algos/",zeroOwnModel,".rda"))
  }


  #separate modelDate into month,day,year objects
  modelDateSplit<-data.frame(modelDate) %>% setNames(nm = c("modelDate")) %>% tidyr::separate(col = "modelDate",into = c("mMonth","mDay","mYear"),sep = "_") %>% data.frame()
  mMonth<-modelDateSplit[,1]
  mDay<-modelDateSplit[,2]
  mYear<-modelDateSplit[,3]

  #get ContestGroupId for draftkingsData
  cgIdDf<-read.csv(file=paste0("~/NBA_Daily/sourceData/",mYear,"/",modelDate,"/",gameSlate,"/source.csv")) %>% dplyr::select(-X)
  cgId<-cgIdDf[,"DraftGroupId"]

  #create directory for dkData files
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear),showWarnings = FALSE)
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate),showWarnings = FALSE)
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate),showWarnings = FALSE)
  #DKSalaries directory
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKSalaries"),showWarnings = FALSE)
  #DKEntries directory
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKEntries"),showWarnings = FALSE)
  #fantasyLabs directory
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/fantasyLabs"),showWarnings = FALSE)

  #if sameDay as contest
  #download DKSalaries
  if(sameDay==TRUE){
  setwd(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKSalaries"))
  system(command = paste0("curl https://www.draftkings.com/bulklineup/getdraftablecsv?draftGroupId=",cgId," -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.draftkings.com/lineup/upload' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9' -H 'Cookie: ",dCookies," -o DKSalaries.csv --compressed"))
  #import DKSalaries original
  dkData<-read.csv(file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKSalaries/DKSalaries.csv"),quote = "",skip = 7)[,10:18]
  }else{
  #download DKEntries
   # if(length(read.csv(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKEntries/DKEntries.csv")))<=1)
  setwd(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKEntries"))
  system(command = paste0("curl -L https://www.draftkings.com/bulkentryedit/getentriescsv?draftGroupId=",cgId," -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' -H 'DNT: 1' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9' -H 'Cookie: ",dCookies," -o DKEntries.csv --compressed"))
  #setwd(hmDir)
  #fix DKSalaries for optimization
  #import DKSalaries original
  dkData<-read.csv(file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKEntries/DKEntries.csv"),quote = "",skip = 7)[,14:22]
  }

  setwd(hmDir)

  #set Names for DKSalariesOptim
  names(dkData)<-c("Position","Name + ID","Name","ID","Roster Position","Salary","Game Info","TeamAbbrev","AvgPointsPerGame")
  #dkData$`Game Info`<-paste0("@",dkData$TeamAbbrev)
  #write DKSalariesOptim
  dkNameFix1<-gsub("(LOCKED)","",as.character(dkData$`Name + ID`))
  dkNameFix2<-gsub("\\s*\\()","",as.character(dkNameFix1))
  dkData$`Name + ID` <- dkNameFix2

  ##Get eventData for "Game Info" of past games for optimizer to work
  gameInfoURL <- paste0("https://www.fantasylabs.com/api/sportevents/2/",modelDate,"?range=true")
  setwd(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate))
  y6 <- paste0("gameInfo.json")
  pmCurlHandles <- paste0("-H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36' -H 'Accept: application/json, text/plain, */*' -H 'Referer: http://www.fantasylabs.com/nfl/player-models/' -H 'Cookie: ",cookie,"  -o ",y6," -H 'Connection: keep-alive' --compressed")
  curlAddress <- paste0("curl -L ",gameInfoURL," ",pmCurlHandles)
  #download gameInfo json to json folder
  system(curlAddress,ignore.stderr = TRUE)
  gameInfoDf <- jsonlite::fromJSON(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/",y6), simplifyDataFrame = TRUE)
  foreach(i=1:nrow(gameInfoDf)) %do% {
    if(nchar(gameInfoDf$EventTime[i])==11){
      gameInfoDf$EventTime[i]<-paste0(0,gameInfoDf$EventTime[i])
    }else{
      gameInfoDf$EventTime[i]<-gameInfoDf$EventTime[i]
    }
  }
  if(nchar(mDay)==1){
    mDay<-paste0(0,mDay)
  }
  rightDate<-paste0(mYear,"-",mMonth,"-",mDay,"T00:00:00")
  gameInfoDf<-gameInfoDf %>% dplyr::filter(EventDate==rightDate)
  eventTimeSep<- tidyr::separate(gameInfoDf,col="EventTime",into=c("Time","PM","EST"),sep=" ")
  gameInfoDf[gameInfoDf$VisitorTeamShort == "NYK","VisitorTeamShort"]<-"NY"
  gameInfoDf[gameInfoDf$HomeTeamShort == "NYK","HomeTeamShort"]<-"NY"
  gameInfoDf[gameInfoDf$VisitorTeamShort == "SAS","VisitorTeamShort"]<-"SA"
  gameInfoDf[gameInfoDf$HomeTeamShort == "SAS","HomeTeamShort"]<-"SA"
  gameInfoDf[gameInfoDf$VisitorTeamShort == "PHX","VisitorTeamShort"]<-"PHO"
  gameInfoDf[gameInfoDf$HomeTeamShort == "PHX","HomeTeamShort"]<-"PHO"
  gameInfoDf[gameInfoDf$VisitorTeamShort == "GSW","VisitorTeamShort"]<-"GS"
  gameInfoDf[gameInfoDf$HomeTeamShort == "GSW","HomeTeamShort"]<-"GS"
  gameInfoDf[gameInfoDf$VisitorTeamShort == "NOP","VisitorTeamShort"]<-"NO"
  gameInfoDf[gameInfoDf$HomeTeamShort == "NOP","HomeTeamShort"]<-"NO"

  gameInfoFix<-paste0(gameInfoDf$VisitorTeamShort,"@",gameInfoDf$HomeTeamShort," ",mMonth,"/",mDay,"/",mYear," ",eventTimeSep$Time," ",eventTimeSep$PM," ET")
  gameInfoFixDf<-bind_rows(data.frame(Team=gameInfoDf$HomeTeamShort,gameInfoFix=gameInfoFix),data.frame(Team=gameInfoDf$VisitorTeamShort,gameInfoFix=gameInfoFix))
  gameInfoFixDf[gameInfoFixDf$Team == "NYK","Team"]<-"NY"
  gameInfoFixDf[gameInfoFixDf$Team == "SAS","Team"]<-"SA"
  gameInfoFixDf[gameInfoFixDf$Team == "PHX","Team"]<-"PHO"
  gameInfoFixDf[gameInfoFixDf$Team == "GSW","Team"]<-"GS"
  gameInfoFixDf[gameInfoFixDf$Team == "NOP","Team"]<-"NO"

  gameInfoJoin<-dplyr::inner_join(dkData[,c(1:6,8,9)],gameInfoFixDf,by=c("TeamAbbrev"="Team"))
  names(gameInfoJoin)<-c(names(gameInfoJoin[1:8]),"Game Info")

  dkData<-gameInfoJoin[,c(1:6,9,7,8)]

  nba <- read.csv(paste0("~/NBA_Daily/dfsProjections/",mYear,"/",modelDate,"/",gameSlate,"/","nba",nbaModel$method,labModel,"_Zero",zeroOwnModel$method,labZeroModel,"_Projections.csv")) %>% dplyr::select(-X)
  nbaExtra<-read.csv(paste0("~/NBA_Daily/dataSets/",mYear,"/",modelDate,"/",gameSlate,"/stats.csv")) %>% dplyr::select(-X)
  nbaZeroExtra<-read.csv(paste0("~/NBA_Daily/dataSets/",mYear,"/",modelDate,"/",gameSlate,"/zeroStats.csv")) %>% dplyr::select(-X)
  nbaFRIDBind<-bind_rows(nbaExtra,nbaZeroExtra)

  dkData$Name<-gsub('[[:punct:]]',"",dkData$Name)
  nba$Player_Name<-gsub('[[:punct:]]',"",nba$Player_Name)
  dkData[dkData$Name == "Kelly Oubre Jr","Name"]<-"Kelly Oubre"
  dkData[dkData$Name == "Otto Porter Jr","Name"]<-"Otto Porter"
  dkData[dkData$Name == "Wendell Carter Jr","Name"]<-"Wendell Carter"
  dkData[dkData$Name == "Mo Harkless","Name"]<-"Maurice Harkless"

  #nbaNamesID<-nbaFRIDBind %>% dplyr::select(Player_Name,FantasyResultId)
  #nba<-dplyr::inner_join(nba,nbaNamesID,by="Player_Name") %>% unique()
  #nba$FantasyResultId<-as.character(nba$FantasyResultId)

  dkData<-dkData[dkData$Name %in% nba$Player_Name,]

  write.csv(dkData,file = paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKSalaries/DKSalariesOptim.csv"),row.names=FALSE)

  #read in raw DKSalariesOptim and cleanup
  data <-coach::read_dk(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/DKSalaries/DKSalariesOptim.csv"))
  #read in projections file
  #nba <- read.csv(paste0("~/NBA_Daily/dfsProjections/",mYear,"/",modelDate,"/",gameSlate,"/",saveNameAdd,"cubistProjections.csv")) %>% dplyr::select(-X)
  #replace "Player_Name" column name with "player" for joining data with projections
  #names(nba)<-gsub("Player_Name", replacement = "player", names(nba))
  #join DKSalariesOptim with projections
  #nbaExtra<-read.csv(paste0("~/NBA_Daily/dataSets/",mYear,"/",modelDate,"/",gameSlate,"/stats.csv")) %>% dplyr::select(-X)
  #nbaZeroExtra<-read.csv(paste0("~/NBA_Daily/dataSets/",mYear,"/",modelDate,"/",gameSlate,"/zeroStats.csv")) %>% dplyr::select(-X)
  #nbaFRIDBind<-bind_rows(nbaExtra,nbaZeroExtra)

  #nbaNamesID<-nbaFRIDBind %>% dplyr::select(Player_Name,FantasyResultId)
  #nba<-dplyr::inner_join(nba,nbaNamesID,by="Player_Name") %>% unique()
  #nba$FantasyResultId<-as.character(nba$FantasyResultId)

  #data$player<-gsub('[[:punct:]]',"",data$player)
  #nba$Player_Name<-gsub('[[:punct:]]',"",nba$Player_Name)


  data2 <- dplyr::inner_join(data,nba,by = c("player" = "Player_Name"))
  #insert projections into "fpts_proj" column for optimization
  if(projectionSrc=="xgb"){
  data3 <- data2 %>% dplyr::mutate(fpts_proj=data2$xgbProj)
  }else{
    data3 <- data2 %>% dplyr::mutate(fpts_proj=data2$projection)
    }
  #data4 <- read.csv(paste0("~/NBA_Daily/dataSets/",mYear,"/",modelDate,"/",gameSlate,"/zeroStats.csv"))
  #data4<-data4[,c("Player_Name","Team","OppTeam")]
  #data3<-data3 %>% select(-team,-opp_team)
  #data3<-inner_join(data3,data4,by=c("player"="Player_Name"))
  #data3<-data3[,c(1:3,36,37,4:35)]
  #names(data3)<-c(names(data3[1:3]),"team","opp_team",names(data3[6:37]))
  #data3$location<-data3$team
  #data3$opp_team<-substr(data3$opp_team, start = 1, stop = 3)


  model <- coach::model_dk_nba(data3)
  lineups<- coach::optimize_generic(na.What(data3),model,L = lineUps,min_salary = 49500)
  lineupsNorm<-foreach(a=1:lineUps,.combine = data.frame) %do% {
    lnorm<-coach::normalize_lineup(lineups[[a]],site = "draftkings",sport = "nba")
    suppressWarnings(row.names(lnorm)<- c("PG","SG","SF","PF","C","G","F","UTIL"))
    t(lnorm)
  }
  lineupsSplit<-foreach(b=1:lineUps-1) %do%{
  newnames<-names(lineupsNorm[grepl(pattern = paste0(".",b),x = names(lineupsNorm))])
    lineupsNorm[,c(newnames)]
  }
  lineupsSplit[[1]]<-lineupsNorm[,c(1:8)]
  lineupOutForm<-foreach(c=1:lineUps) %do% {
    sdSplit<-sd(lineupsSplit[[c]][10,1:8])
    actual<-sum(as.numeric(lineupsSplit[[c]][33,1:8]))
    a<-sum(as.numeric(lineupsSplit[[c]][8,1:8]))
    b<-sum(as.numeric(lineupsSplit[[c]][9,1:8]))
    d<-sum(as.numeric(lineupsSplit[[c]][11,1:8]))
    e<-sum(as.numeric(lineupsSplit[[c]][12,1:8]))
    f<-sum(as.numeric(lineupsSplit[[c]][13,1:8]))
    g<-sum(as.numeric(lineupsSplit[[c]][14,1:8]))
    h<-sum(as.numeric(lineupsSplit[[c]][15,1:8]))
    i<-sum(as.numeric(lineupsSplit[[c]][16,1:8]))
    j<-sum(as.numeric(lineupsSplit[[c]][17,1:8]))
    k<-sum(as.numeric(lineupsSplit[[c]][19,1:8]))
    l<-sum(as.numeric(lineupsSplit[[c]][20,1:8]))
    m<-sum(as.numeric(lineupsSplit[[c]][21,1:8]))
    n<-sum(as.numeric(lineupsSplit[[c]][22,1:8]))
    o<-sum(as.numeric(lineupsSplit[[c]][23,1:8]))
    p<-sum(as.numeric(lineupsSplit[[c]][24,1:8]))
    q<-sum(as.numeric(lineupsSplit[[c]][25,1:8]))
    r<-sum(as.numeric(lineupsSplit[[c]][26,1:8]))
    s<-sum(as.numeric(lineupsSplit[[c]][27,1:8]))
    t<-sum(as.numeric(lineupsSplit[[c]][30,1:8]))
    u<-sum(as.numeric(lineupsSplit[[c]][32,1:8]))
    v<-sum(as.numeric(lineupsSplit[[c]][35,1:8]))
    w<-sum(as.numeric(lineupsSplit[[c]][36,1:8]))
    x<-sum(as.numeric(lineupsSplit[[c]][38,1:8]))
    lineupsSplit[[c]][2,1:8] %>% mutate(sd=sdSplit,Actual=actual,salary=a,fpts_avg=b,gppRank=d,projection=e,Score=f,GPPP=g,p_own=h,Ceiling=i,Floor=j,MinutesProj=k,FantasyPerMinute=l,UsageProj=m,PtVal=n,ProjPlusMinus=o,PaceD=p,OppPlusMinus=q,PointsPerTouch=r,Touches=s,Upside=t,StealsPlusBlocks=u,sixTimesPts=v,projValue=w,matchupPlusMinus=x) %>% setNames(c("PG","SG","SF","PF","C","G","F","UTIL","risk","ActualPoints",rownames(lineupsSplit[[1]])[c(8:9,11:17,19:27,30,32,35,36,38)]))
    }
  lineOuts<-bind_rows(lineupOutForm)

  lineOutsUniqueRisk<-lineOuts$risk %>% unique()
  uniqueRiskLines<-foreach(a=1:length(lineOutsUniqueRisk)) %do% {
    first<-which(lineOuts$risk==lineOutsUniqueRisk[a])
    first[1]
  } %>% unlist()
  lineOuts<-lineOuts[uniqueRiskLines,] %>% dplyr::arrange(desc(risk))
  #timeSt<-Sys.time()
  #hour(timeSt)>=13){
  #  timeSt<- Sys.time() - hours(12)
  #}
  #timeSt<-gsub("[[:space:]]", "_", timeSt)
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate),showWarnings = FALSE)
  dir.create(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups"),showWarnings = FALSE)
  luNumber<-nrow(lineOuts)
  #write.csv(lineOuts,file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups/",luNumber,"__",timeSt,".csv"),row.names = FALSE)
  #lineupsSplit

  #dkData for joining Name + ID to Optimized Lineups
  dkDataNames<-dkData[,c(4,2)]
  names(dkDataNames)<-c("ID","NamePlusID")
  dkDataNames<-sapply(dkDataNames,as.character) %>% data.frame()
  lineOutsPG<-dplyr::left_join(lineOuts,dkDataNames,by=c("PG"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsSG<-dplyr::left_join(lineOuts,dkDataNames,by=c("SG"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsSF<-dplyr::left_join(lineOuts,dkDataNames,by=c("SF"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsPF<-dplyr::left_join(lineOuts,dkDataNames,by=c("PF"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsC<-dplyr::left_join(lineOuts,dkDataNames,by=c("C"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsG<-dplyr::left_join(lineOuts,dkDataNames,by=c("G"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsF<-dplyr::left_join(lineOuts,dkDataNames,by=c("F"="ID")) %>% dplyr::select(NamePlusID)
  lineOutsUTIL<-dplyr::left_join(lineOuts,dkDataNames,by=c("UTIL"="ID")) %>% dplyr::select(NamePlusID)

  lineOutsNames<- dplyr::bind_cols(lineOutsPG,lineOutsSG,lineOutsSF,lineOutsPF,lineOutsC,lineOutsG,lineOutsF,lineOutsUTIL)
  names(lineOutsNames)<-c("PG","SG","SF","PF","C","G","F","UTIL")
  lineOutsNames<-data.frame(lineOutsNames,lineOuts[,9:32])
  lineOuts<-lineOutsNames

  lineOutsPred<-predict(optModel,na.What(lineOuts))
  lineOuts<-lineOuts %>% dplyr::mutate(lineProj=lineOutsPred)

  optimNumber<-length(list.files(paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups/"))) + 1
  #write.csv(lineOuts,file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups/",luNumber,"__",timeSt,".csv"),row.names = FALSE)
  write.csv(lineOuts,file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups/",optimNumber,".csv"),row.names = FALSE)




  myTopLine<-lineOuts$ActualPoints %>% rapportools::max()
  myBottomLine<-lineOuts$ActualPoints %>% rapportools::min()
  myLinesSd<-round(sd(lineOuts$ActualPoints),4)

  if(sameDay!=TRUE){
    nbaResults(modelDate = modelDate)
    cashLine<-read.csv(file=paste0("~/NBA_Daily/results/",mYear,"/",modelDate,"/",gameSlate,"/results.csv")) %>% dplyr::select(-X) %>% .[1,paste0(gameSlate,".gppAverage")]
    winningLine<-read.csv(file=paste0("~/NBA_Daily/results/",mYear,"/",modelDate,"/",gameSlate,"/results.csv")) %>% dplyr::select(-X) %>% .[1,paste0(gameSlate,".best")]
    greenLineUps<-foreach(z=1:nrow(lineOuts),.combine = "+") %do% dplyr::if_else(lineOuts[z,"ActualPoints"]>=cashLine,true = 1,false = 0)
    cashPercent<-greenLineUps/nrow(lineOuts)*100
    write.csv(lineOuts,file=paste0("~/NBA_Daily/draftkingsData/",mYear,"/",modelDate,"/",gameSlate,"/optimizedLineups/",optimNumber,nbaModel$method,zeroOwnModel$method,"__",round(cashPercent,1),"%_or_",greenLineUps,"_of_",nrow(lineOuts),"_lineups_Over_",round(cashLine,1),"_inTheMoney","_with_High_of_",myTopLine,"_and_Low_of_",myBottomLine,"_and_stDev_of_",myLinesSd,".csv"),row.names = FALSE)
    return(list("lineUps"=lineOuts,"actualPerformance"=c(paste0(round(cashPercent,1),"% or ",greenLineUps," of ",nrow(lineOuts)," lineups Over ",round(cashLine,1)," inTheMoney. High of ",myTopLine," ,Low of ",myBottomLine," and stDev of ",myLinesSd))))
  }else{
      return(lineOuts)
  }
}
benjaminryanclarke/rDailyFantasy documentation built on May 24, 2019, 7:53 a.m.