我正在尝试编写一个函数来测试 GBM 模型的一系列超参数。我只希望 GBM 调用中的三个参数发生变化。其余的我想保持静态。do.call
似乎是答案,因为它接受参数列表并将它们传递给函数。然而,我不知道是否有办法“修复”一些我不想改变的论点。
parms <- list(
'interaction.depth'=1:5,
'n.trees'=c(500,1000,2000),
'shrinkage'=c(0.01, 0.005, 0.001))
res <-expand.grid(parms)
> head(res)
interaction.depth n.trees shrinkage
1 1 500 0.01
2 2 500 0.01
3 3 500 0.01
4 4 500 0.01
5 5 500 0.01
6 1 1000 0.01
然后,我想将扩展网格的每一行作为参数列表传递到 GBM 函数中,同时“固定”其他参数。就像是:
#pseudo-codeish
apply(res, 1, function (row) {do.call("gbm", row)})
do.call
需要一个列表作为第二个参数。您可以将列表与c
。
以下表达式创建一个包含元素的列表a
, b
,以及命名的列res
,使用第一行数据:
c(list(a=1, b=2), as.list(res[1,]))
The apply
你想要的表达看起来像这样:
apply(res, 1, function(row) do.call('gbm', c(list(a=1, b=2), as.list(row))))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)