R “避免”的建议;如果;自定义函数中带有可选参数的语句
考虑以下对象R “避免”的建议;如果;自定义函数中带有可选参数的语句,r,data.table,ellipsis,R,Data.table,Ellipsis,考虑以下对象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 =
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
当然,这是一个MWE,我的自定义函数有一个更大的主体,但本质上,相同的概念也适用(如果可以进一步简化的话)
非常感谢您的任何建议 使用此
if
语句有什么问题?如果只传递…
语句,即使它是空的,也会出现错误吗?没有问题。想象一下这个函数中有一个更大的物体。。。如果不满足条件,if
语句强制我重复该过程。这个函数变得相当大,我觉得处理它很不愉快。DT=data.table(x=1:100);(函数(i,…)DT[i,…])(1:5)
按预期工作。因此,要么你的例子没有抓住这里错误的本质,要么你可以毫不费力地消除if
语句,我只是从问题的主体中复制了它!你拥有内在的力量:p
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)), ...])
}