Предложения избегать использования оператора if в пользовательских функциях с необязательным аргументом - PullRequest
0 голосов
/ 05 июня 2018

Рассмотрим следующий объект dt:

library(data.table)

set.seed(12345)

dt <- data.table(Gender = sample(x = c("Male", "Female"), size = 10, replace = T), 
           Department = sample(x = c("Sales", "Marketing"), size = 10, replace = T), 
           Hours = runif(n = 10, 6, 8))

dt

    Gender Department    Hours
 1:   Male  Marketing 7.981743
 2: Female  Marketing 6.142455
 3: Female  Marketing 7.284672
 4:   Male  Marketing 6.114810
 5:   Male  Marketing 6.067997
 6:   Male  Marketing 6.833539
 7:   Male      Sales 7.845914
 8: Female  Marketing 6.689554
 9:   Male      Sales 7.483933
10: Female      Sales 6.451656

Теперь я хочу написать свою собственную функцию для расчета среднего количества часов, отработанных для всей таблицы или по группам.Мне было интересно, можно ли еще упростить приведенную ниже функцию.Более конкретно, если я могу избежать написания оператора if(), когда ... не используется.Это то, что я получил до сих пор:

calcMean <- function(data, ...){
  args <- list(...)

  if(length(args) == 0) return(data[, .(`Avg. hours worked` = mean(Hours, na.rm = T))])

  return(data[, .(`Avg. hours worked` = mean(Hours, na.rm = T)), ...])
}

Конечно, это MWE, моя пользовательская функция имеет больший корпус, но, по сути, применима та же концепция (если она будетУпрощено).

Любое предложение очень ценится!

...