我想计算一些统计数据并将结果作为另一个data.table返回。我可以使用以下内容完成此操作。
DT <- data.table::data.table(station = rep(1:1,52560), mod = rnorm(1*52560),obs = rnorm(1*52560)) # 1year , 1 station
stat <- DT[,.(minObs = min(obs),
minMod = min(mod),
maxObs = max(obs),
maxMod = max(mod),
meanObs = mean(obs)]
然而,我的问题是我想有条件地添加这些统计数据。例如,只有在requestedStats的向量中存在meanObs时, 添加列meanObs。原因是我正在计算相当多的统计数据,而且长度很长,我想让用户选择统计数据。我怎样才能做到这一点?假设
requestedStats = c("maxObs","meanObs")
只是按要求添加。我想避免计算所有统计数据。只返回要求的那些。
答案 0 :(得分:3)
为了避免预先计算所有统计数据,您需要将可能被命名的每个统计信息放入列表中。必须引用该列表,以便R在尝试之前不会对其进行评估。
my_exprs = quote(list(
minObs = min(obs),
minMod = min(mod),
maxObs = max(obs),
maxMod = max(mod),
meanObs = mean(obs)
))
w = which(names(my_exprs) %in% requestedStats)
DT[, eval(my_exprs[c(1,w)])]
# maxObs meanObs
# 1: 4.51951 0.0009352312