具有以下特性
> library(gbm)
> mdl<-gbm::gbm(data=iris,formula=Species ~ .,distribution="gaussian")
然后:
> mdl
gbm::gbm(formula = Species ~ ., distribution = "gaussian", data = iris)
A gradient boosted model with gaussian loss function.
100 iterations were performed.
There were 4 predictors of which 4 had non-zero influence.
我想要什么。
但是如果我使用do.call:
> mdl<-do.call(gbm::gbm,list(data=iris,formula=Species ~ .,distribution="gaussian"))
然后
> mdl
(function (formula = formula(data), distribution = "bernoulli",
data = list(), weights, var.monotone = NULL, n.trees = 100,
interaction.depth = 1, n.minobsinnode = 10, shrinkage = 0.1,
bag.fraction = 0.5, train.fraction = 1, cv.folds = 0, keep.data = TRUE,
...
...
...
A gradient boosted model with gaussian loss function.
100 iterations were performed.
There were 4 predictors of which 4 had non-zero influence.
它在开头打印gbm
函数的定义,然后打印gbm
调用(包括整个数据集iris),最后打印我要查找的文本。
我需要使用do.call
,因为我想参数化任何分类算法的所有参数,然后将输出放入shiny
中的verbatimTextOutput
。
有什么方法可以阻止do.call
返回gbm
的定义以及整个数据集吗?或者其他方法可以执行gbm
,在列表中传递参数?
谢谢。
1条答案
按热度按时间drkbr07n1#
我们必须做两件事来防止这种行为:
首先,我们可以在
iris
上使用substitute()
,这将防止call
列出iris
数据集的所有列。其次,我们应该避免在
do.call
中使用gbm::gbm
,而是加载库并使用字符串"gbm"
来调用函数:如果我们在do call中使用
gbm::gbm
,它将在捕获的调用中包含整个函数定义:由reprex package(v2.0.1)于2023年2月20日创建