time.limit1 <- 8 * 60
time.limit2 <- 0.15*1
time.limit3 <- 1 * 60
list.variables <- c("fvar1", "fvar2","fvar3", "svar1", "svar2", "svar3")
naper.variables <- c("class2","call.type","priority",
                     "dispatch.delay", "travel.time", "response.time")
rt.summary <- function(city.data, list.variables) {
  city.small <- city.data %>% select(one_of(list.variables)) 
  city.summary <- city.small %>%
  filter(call.type==2,
         !is.na(response.time), 
         response.time <= time.limit1,
         response.time >= time.limit2) %>%
  mutate(dispatch.delay2 = pmin(dispatch.delay, time.limit3),
         travel.time2 = pmin(travel.time, time.limit3),
         response.time2 = pmin(response.time, time.limit3)) %>%
  group_by(class2) %>% 
  summarise(count = n(),
            DDM_Avg = mean(dispatch.delay2),
            TTM_Avg = mean(travel.time2),
            RTM_Avg = mean(response.time2),
            DDM_P90 = quantile(dispatch.delay, 0.9),
            TTM_P90 = quantile(travel.time, 0.9),
            RTM_P90 = quantile(response.time, 0.9))  
  return(list(city.small, city.summary))
}
rt.summary
这个程序是ok的, 但是我想更flexible, 把function里面 col names 都换成 list.variables 的名字
像这样
time.limit1 <- 8 * 60
time.limit2 <- 0.15*1
time.limit3 <- 1 * 60
list.variables <- c("fvar1", "fvar2","fvar3", "svar1", "svar2", "svar3")
naper.variables <- c("class2","call.type","priority",
                     "dispatch.delay", "travel.time", "response.time")
rt.summary <- function(city.data, list.variables) {
  args <- as.list(match.call())
  city.small <- city.data %>% select(one_of(list.variables)) 
  city.summary <- city.small %>%
  filter(fvar2==2,
         !is.na(svar3), 
         svar3 <= time.limit1,
         svar3>= time.limit2) %>%
  mutate(svar12 = pmin(svar1, time.limit3),
         svar22 = pmin(svar2, time.limit3),
         svar32 = pmin(svar3, time.limit3)) %>%
  group_by(fvar1) %>% 
  summarise(count = n(),
            DDM_Avg = mean(svar12),
            TTM_Avg = mean(svar22),
            RTM_Avg = mean(svar32),
            DDM_P90 = quantile(svar1, 0.9),
            TTM_P90 = quantile(svar2, 0.9),
            RTM_P90 = quantile(svar3, 0.9))  
  return(list(city.small, city.summary))
}