【发布时间】:2021-08-13 12:43:06
【问题描述】:
我第一次尝试使用 pmap,但在分配参数时遇到了困难。这是我的测试数据集:
overall <- data.table(dependant = rep(c("SPS", "DEPENDANT", "EMP"), 3),
exposure = rnorm(9, 0, 1),
age = c(1,2,3,1,2,3,3,1,2),
gender = rep(c("F", "F", "M"), 3))
我最初是在做这样的事情:
# spouse
SPS <- overall[dependant == "SPS", .(exposure = sum(exposure)), by = c("dependant", "age", "gender")]
sumExposureSPS <- sum(SPS$exposure)
SPSnormalized <- SPS[, exposure := exposure/sumExposureSPS][, .(age, gender, exposure)]
# dependant
DEPENDENT <- overall[dependant == "DEPENDENT", .(exposure = sum(exposure)), by = c("dependant", "age", "gender")]
sumExposureDEPENDENT <- sum(DEPENDENT$exposure)
DEPENDENTnormalized <- DEPENDENT[, exposure := exposure/sumExposureDEPENDENT][, .(age, gender, exposure)]
# employee
EMP <- overall[dependant == "EMP", .(exposure = sum(exposure)), by = c("dependant", "age", "gender")]
sumExposureEMP <- sum(EMP$exposure)
EMPnormalized <- EMP[, exposure := exposure/sumExposureEMP][, .(age, gender, exposure)]
但这是非常重复的,实际上只是名称不同,执行的操作总是相同的。因此我写了一个函数:
calculateSubset <- function(overall,
dependantCode){
subset <- overall[dependant == dependantCode, .(exposure = sum(exposure)), by = c("dependant", "age", "gender")]
sumExposureSubset <- sum(subset$exposure)
subsetNormalized <- subset[, exposure := exposure/sumExposureSubset][, .(age, gender, exposure)]
return(subset)
}
所以我把它简化为:
SPSnormalized <- calculateSubset(overall = overall,
dependantCode = "SPS")
DEPENDENTnormalized <- calculateSubset(overall = overall,
dependantCode = "DEPENDENT")
EMPnormalized <- calculateSubset(overall = overall,
dependantCode = "EMP")
但是,这仍然是重复的。我似乎有一些人使用pmap 来完全摆脱重复代码的例子。
如何在 pmap 中传递参数,以便最终获得所需的输出?
【问题讨论】: