首页 > 解决方案 > 如何评估具有不同参数的函数,而不必继续在 R 中写出来

问题描述

我有一个函数,我想将所有内容固定在一个单独的参数中。

    ls <- score_model_compound(data, pred, tmp$Prediction, score= "log")
    bs <- score_model_compound(data, pred, tmp$Prediction, score="Brier")
    ss <- score_model_compound(data, pred, score="spherical")

我想要的是

ls = data.frame()
    ls <- score_model_compound(data, pred, score= c("log", "Brier", "spherical"))

有没有我可以使用的功能,比如apply()让我这样做?

谢谢

标签: rfunctionloops

解决方案


mapply()救援:

score_v = c('spherical', 'log', 'Brier')

l = mapply(
  score_model_compound, # function
  score = score_v, # variable argument vector
  MoreArgs = list(data = data, # fixed arguments
                  pred = pred),
  SIMPLIFY = FALSE # don't simplify
) 

您可能需要自己稍微调整一下,因为您没有提供可重现的示例。mapply(SIMPLIFY = FALSE)将为您输出一个列表。如果函数返回 data.frame's,则 data.frame's 的结果列表随后可以与 eg 绑定data.table::rbindlidst()


或者,您可以只使用一个循环:

l = list()
for (i in seq_along(score_v)) {
  sc = score_v[i]
  message('Modeling: ', sc)
  smc = score_model_compound(data, pred, score = sc)
  l[[i]] = smc
  names(l)[i] = sc
}

推荐阅读