Вы можете использовать dplyr и rlang:
library(rlang)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
d <- data.frame(H = sample(1:100, 10),
BB = sample(1:100, 10),
HBP = sample(1:100, 10),
AB = sample(1:100, 10),
SF = sample(1:100, 10))
onbase <- function(df, H, BB, HBP, AB, SF) {
H <- enquo(H)
BB <- enquo(BB)
HBP <- enquo(HBP)
AB <- enquo(AB)
SF <- enquo(SF)
out <- mutate(df, OBP := (!!H + !!BB + !!HBP)/(!!AB + !!BB + !!HBP + !!SF))
return(out)
}
onbase(d, H, BB, HBP, AB, SF)
#> H BB HBP AB SF OBP
#> 1 41 32 82 50 42 0.7524272
#> 2 71 75 66 92 16 0.8514056
#> 3 70 60 41 98 77 0.6195652
#> 4 45 90 29 16 59 0.8453608
#> 5 93 74 98 85 41 0.8892617
#> 6 1 10 89 38 52 0.5291005
#> 7 5 47 30 90 56 0.3677130
#> 8 15 7 55 17 32 0.6936937
#> 9 58 77 45 42 100 0.6818182
#> 10 64 9 85 78 27 0.7939698
Создано в 2020-04-15 пакетом Представлять (v0.3.0)
Я не знаю бейсбольной статистики, поэтому я просто составил цифры, но расчет работает.