我有两个列表
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)并为每个方法调用“func”函数。 我尝试了 for 循环,但它没有给出所需的结果。
可重现的代码
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)
}
最佳答案
如果我没完全明白你想要什么,请原谅。这行得通吗?
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])
}
双方括号很重要。
关于r - 将值列表作为参数传递给 R 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471052/