r - 如何评估具有不同参数的函数,而不必继续在 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()
让我这样做?
谢谢
解决方案
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
}
推荐阅读
- matlab - Matlab fscanf字符串读取奇怪的行为
- python - 更多 pythonic 在处理 urllib 响应而不是 chr(int(x)) 时将字节转换为字符串
- google-colaboratory - 是否可以从带有 google colab 中的代码单元格的文本单元格中获取文本?
- c# - 如何处理按键和上下键?
- c - 为什么存储在'z'中的值是35?不应该是 20,因为在函数 'c=*b' 中(c 等于 *b 指向的值)?
- c - 如何将两个已排序的文件合并为一个已排序的文件?
- trading - 编译器不能用参数调用“pivothighs”
- mongodb - 单个查询:更新文档中的特定值,否则插入整个文档
- arrays - 如何在bash中使用带有循环的变量设置数组
- laravel - 尝试运行 vagrant up 时出现“在 PATH 变量中找不到可执行文件‘modinfo’”错误