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

标签 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)并为每个方法调用“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/

相关文章:

R 迭代列表中的连续对

R Shiny : How do you change the background color of the Header?

r - 将权重传递给函数内的 lm 和其他人

c++ - C++函数/方法设计的良好实践

c - typedef 函数指针类型

r - 如何更改 ggplot2 中的默认统计信息

javascript - 数据表中列的摘要(来自包 DT)

Javascript使函数一个接一个地执行

c++ - 实现 [B,C]=f(A) 语法(函数 f 作用于具有两个或多个输出数组的数组)

java - jOOQ - 如何将列和表传递给函数?