将值列表作为参数传递给R中的函数

时间:2015-07-17 08:03:20

标签: r function

我有两个列表

   a=expand.grid(mtry=c(8))
   b=expand.grid(usekernel=c(8), fL=c(9))
   c=expand.grid(usekernel=c(8), fL=c(9))
   list_1<- list(a,b,c)
   list_2<- list("rf","nb","nb2")

我的功能如下

  func(TrainData, TrainClasses,method,tune)
  if method is "rf" then tune=a, if "nb" then tune=b, nb2=c

我想要传递列表(list_1和list_2)并调用&#34; func&#34;而不是每次都编写方法和调优。每种方法的功能。 我试过循环,但它没有给出预期的结果。

可重复的代码

library(caret)
data(iris)
TrainData <- iris[,1:4]
TrainClasses <- iris[,5]
method<- c("rf")
tune<-expand.grid(mtry=c(8))

func<- function(TrainData, TrainClasses,method,tune )
{
 k <- train(TrainData, TrainClasses,
               method = method,
               preProcess = c("center", "scale"),
               tuneLength = 10,
               tuneGrid = tune,
               trControl = trainControl(method = "cv"))
 k
}

func(TrainData, TrainClasses,method, tune)

所以,在上面的函数中,我传递了一个方法及其曲调,但现在我想用各自的曲调一个接一个地传递方法列表,而不是每次都给出方法和曲调,我想一次执行所有3种方法。 就像我之前说过的,我的list_2包含方法,list_1包含各自的曲调。

我的代码:

 for(i in 1:3){
     tune_e=c(list(TrainData=TrainData,TrainClasses=TrainClasses),list_2[i],list_1[i])
     do.call('func',tune_e)
 }

1 个答案:

答案 0 :(得分:1)

如果我还没有完全掌握你想要的东西,请原谅。这会有用吗?

list_1 <- c(a,b,c); list_2 <- c("rf","nb","nb2")
for(i in 1:3){
    func(TrainData, TrainClasses, list_2[i], list_1[i])
}

问题在于列表。如果他们只是矢量,那么它应该工作。出于其他原因,他们是否需要成为名单?如果是这样的话:

list_1 <- list(a,b,c); list_2 <- list("rf","nb","nb2")
for(i in 1:3){
    func(TrainData, TrainClasses, list_2[[1]][i], list_1[[1]][i])
}

双方括号很重要。

相关问题