Raa*_*aad 3 null arguments r function
我正在编写一个内部包含多个函数的函数(一个使用插入符包训练和测试多个模型的包装器)。
问题是,有时我想使用默认参数,有时我想指定我自己的参数。就我而言,有时我想修改tuneGrid,有时我想使用默认网格。我不能使用省略号(...)来传递这个参数,因为每个模型都需要一个单独的网格。
如何在函数参数中包含 if 语句?例如,
family = NULL
y <- rnorm(1000); x <- rnorm(1000)
glm(formula=y~x, if(!is.null(family)){family=family}, data=data.frame(x=x, y=y))
Run Code Online (Sandbox Code Playgroud)
由于多种原因,这不起作用,但我希望您能理解。我试图使用类似的东西作为第二个参数来解释逗号:
noquote( ifelse( !is.null(family), paste0(noquote("family="), family, "(),") ) )
Run Code Online (Sandbox Code Playgroud)
如果您有任何想法,请告诉我。
您可以将函数调用构建为带引号的表达式并动态更改它。就像是
addGrid<-function(expr, grid=NULL) {
if(!is.null(grid)) {
ll<-as.list(expr)
ll$tuneGrid <- grid
as.call(ll)
} else {
expr
}
}
mycall<-quote(train(form= medv~., data = Boston, method = "glmboost"))
addGrid(mycall)
# train(form = medv ~ ., data = Boston, method = "glmboost")
addGrid(mycall, quote(glmBoostGrid))
# train(form = medv ~ ., data = Boston, method = "glmboost", tuneGrid = glmBoostGrid)
Run Code Online (Sandbox Code Playgroud)
这将返回一个表达式,然后您可以调用该表达式eval()来执行该表达式。
否则,您可以使用ifwith 部分语句来填充更多值。
mybase<-function(...) {
train(form= medv~., data = Boston, method = "glmboost", ...)
}
result <- if (!is.null(family)) {
mybase(family=family)
} else {
mybase()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |