【发布时间】:2023-02-24 10:51:03
【问题描述】:
给出一个分类函数ranger,我想使用formals从其定义中获取所有参数及其默认值。然后,我想更改一些默认值并将它们用作 do.call 的参数
library(ranger)
# Getting all the parameters for "ranger" function with their default values
lParams<-formals(ranger)
lParams<-as.list(lParams)
# Replace some default values for testing purposes
lParams$formula<-as.formula("Species~.")
lParams$data<-substitute(iris)
lParams[["..."]]<-NULL
#lParams[["sample.fraction"]]<-NULL
do.call("ranger",lParams)
但它不起作用:
Error in as.logical(test) :
cannot coerce type 'closure' to vector of type 'logical'
sample.fraction 元素似乎是错误的原因。它是一个 call 对象。如果我使用以下方法删除该元素:
lParams[["sample.fraction"]]<-NULL
...所以,我的代码有效。
我不知道如何对待这个对象来防止这个错误。任何想法? 谢谢!!
【问题讨论】:
-
我不确定您为什么要提取所有形式参数只是为了更改默认值。如果缺少默认值,将使用默认值,因此您只需要包含您实际想要更改的参数。从您的代码中仅使用
do.call("ranger", list(data = quote(iris), formula = Species ~ .))就足够了。
标签: r classification do.call