Можно ли сделать функцию для извлечения значений столбцов из одной строки? - PullRequest
0 голосов
/ 18 октября 2018

Я создал формулу формул.Идея в том, что я изучаю бейсбольную статистику и саберметрию.У меня есть ряд вычислений, которые помогают мне найти вероятность победы команды.Последняя формула, которая включает в себя несколько других формул, выглядит так:

GameSBWprobabilityPO <- function(HomeTeam, HomePitcher, AwayTeam, AwayPitcher, season, date){
  Hometeam <- GameSBWteamprobsum(HomeTeam, HomePitcher, season, date)
  Awayteam <- GameSBWteamprobsum(AwayTeam, AwayPitcher, season, date)
  TOTprob  <- sum(Hometeam, Awayteam)
  HTWp     <- (Hometeam/TOTprob)
  ATWp     <- (Awayteam/TOTprob)
  return(HTWp)
}

Мне интересно, есть ли способ, которым я мог бы сделать это просто

<- function(date, HomeTeam)

И чтобы R автоматически заполнял другиепеременные, которые все содержатся в одной строке.Имена столбцов для этих переменных названы так:

HomeTeam = team1
HomePitcher = pitcher1
AwayTeam = team2
AwayPitcher = pitcher2
season = season
date = date

Кроме того, как мне отредактировать вывод?В настоящее время он просто возвращает вероятность того, что hometeam выиграет, основываясь на моей формуле:

[1] 0.5167891

Но я бы хотел выяснить, как сделать так, чтобы каждая команда выглядела как вероятность друг против друга в выходных данных для текущего примера:

[1] BOS 51.46%, HOU 48.54%

Или что-нибудь подобное.СПАСИБО

1 Ответ

0 голосов
/ 18 октября 2018

Мне нравится использовать пакет data.table для таких вещей.Я не знаю, что делает ваша функция "GameSBWteamprobsum", поэтому вот упрощенное решение с использованием цепочки data.table:

library(data.table)

GameSBWteamprobsum <- function(x, ...){2*x}

DT <- data.table(HomeTeam=runif(10,1,10), HomePitcher=runif(10,1,10), AwayTeam=runif(10,1,10), AwayPitcher=runif(10,1,10), season=runif(10,1,10), date=runif(10,1,10))

DT[, "Hometeam" := GameSBWteamprobsum(HomeTeam, HomePitcher, season, date)][
  , "AwayTeam" := GameSBWteamprobsum(AwayTeam, AwayPitcher, season, date)][
    , "TOTprob" := sum(Hometeam, AwayTeam)][
      , "HTWp" := Hometeam/TOTprob][
        , "ATWp" := AwayTeam/TOTprob]

DT

Возможно, вы захотите взглянуть на секцию цепочки здесь

РЕДАКТИРОВАТЬ --------------------------------------------------------------------

Конечно, вы можете передать строку или подмножество строк в вашу функцию на основеусловие для одного или нескольких столбцов:

library(data.table)

GameSBWteamprobsum <- function(x){print(x)}

DT <- data.table(HomeTeam=LETTERS[1:10], HomePitcher=runif(10,1,10), AwayTeam=runif(10,1,10), AwayPitcher=runif(10,1,10), season=runif(10,1,10), date=runif(10,1,10))

GameSBWteamprobsum(DT[HomeTeam == "A"])
...