R 将部分参数列表传递给do.call()

R 将部分参数列表传递给do.call(),r,R,我正在尝试编写一个函数来测试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

我正在尝试编写一个函数来测试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

do.call
需要一个列表作为其第二个参数。您可以将列表与
c
组合。 下面的表达式使用数据的第一行创建一个包含元素
a
b
res
的命名列的列表:

c(list(a=1, b=2), as.list(res[1,]))
所需的
apply
表达式如下所示:

apply(res, 1, function(row) do.call('gbm', c(list(a=1, b=2), as.list(row))))

您可以使用
plyr
软件包中的
m*ply
功能。要返回
gbm
型号列表,请执行以下操作:

gbm.list <- mlply(res, gbm, formula = Y~X1+X2+X3+X4+X5+X6, data = data)
gbm.list
gbm.list <- mlply(res, gbm, formula = Y~X1+X2+X3+X4+X5+X6, data = data)