我有两个列表
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)
}
答案 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])
}
双方括号很重要。