将函数作为参数传递给另一个函数时,如何循环该函数?

时间:2015-02-04 06:01:26

标签: r

我目前设置了一个函数,它将另一个函数作为参数。我试图创建这个函数来循环它作为参数的函数。

然而,按照我设置它的方式,似乎它只运行一次该函数,因为它应该依赖于随机种子,但它会一直以相同的值返回。

我发现解决这个问题的唯一方法是不将函数作为参数,而是将其硬编码到函数中,但这不是我想要做的。

这是我的代码:

runModel <- function(model,runs){
  b = c()
  for (i in 1:runs){
    a <- model$lambda.min
    b <- append(b,a)
  }
  return (c(mean(b),sd(b)))
}

cvModel = cv.glmnet(predictors,outcome,family=c("binomial"),alpha=.9,nfolds=20)

runModel(cvModel,20)

1 个答案:

答案 0 :(得分:3)

我不知道你的对象的'预测器'或'结果'是什么,但看起来你将函数cv.glmnet的结果传递给你的runModel函数而不是函数的表达式。

在每个循环中运行该函数的一种方法是重写函数以传递函数名和参数:

runModel <-function(fun,runs,predictors,outcome,family=c("binomial"),alpha=.9,nfolds=20){
  b = c()

  model <- fun(predictors,outcome,family,alpha,nfolds)
  for (i in 1:runs){
    a <- model$lambda.min
    b <- append(b,a)
  }
  return (c(mean(b),sd(b)))
}

runModel(cv.glmnet,20, predictors,outcome,family=c("binomial"),alpha=.9,nfolds=20)