【问题标题】:How to automate numerous iterations/combinations for a function's arguments in R?如何为 R 中的函数参数自动进行多次迭代/组合?
【发布时间】:2023-03-22 05:24:01
【问题描述】:

我对 R 有点陌生,我目前正在尝试自动化 R 中函数参数的所有可能迭代。我的意思是说我们有一个带有五个参数的函数,可以是 TRUE 或 @987654322 @。我想运行这些参数的所有可能组合并将它们全部转储到几个不同的变量中。

鉴于参数的数量及其二进制性质(10 个可能的参数,选择 5 个),这将为函数创建 252 个可能的参数组合。有没有办法自动化这个过程?还是我被困在代码行中生成所有 252 种可能的组合?我正在使用 auto.arima 函数,并且想测试 lambdaallowmeanallowdriftseasonalstationary 的所有可能组合。函数如下:

ARIMA1<-auto.arima(x, d=NA, D=NA, max.p=5, max.q=5,
     max.P=2, max.Q=2, max.order=5, max.d=2, max.D=1, 
     start.p=2, start.q=2, start.P=1, start.Q=1, 
     stationary=FALSE, seasonal=TRUE,
     ic=c("aicc", "aic", "bic"), stepwise=TRUE, trace=FALSE,
     approximation=(length(x)>100 | frequency(x)>12), xreg=NULL,
     test=c("kpss","adf","pp"), seasonal.test=c("ocsb","ch"),
     allowdrift=TRUE, allowmean=TRUE, lambda=NULL, biasadj=FALSE,
     parallel=FALSE, num.cores=2)

【问题讨论】:

    标签: r function automation arguments iteration


    【解决方案1】:

    一种方法是使用expand.grid 构造一个包含所有可能组合的data.frame,然后遍历该data.frame 的行并填写值。

    这是一个例子:

    x <- 1:5
    y <- 2:6
    z <- c(1,3)
    aa <- letters[7:10]
    w <- c(FALSE, TRUE)
    
    myInputs <- expand.grid(x, y, z, aa, w)
    
    for(i in seq_len(nrow(myInputs))) {
      print(myInputs[i, 1] + myInputs[i, 2] + myInputs[i, 3])
    }
    

    您可以改为使用这些输入来提供您想要的任何功能。

    由于expand.grid 输出的是data.frame,所以混合向量类型(如数字、逻辑、字符)没有问题。

    但是,如果您正在输入字符向量,并且希望它们保持字符状态(而不是转换为因子变量,请确保包含 stringsAsFactors=FALSE 参数。

    【讨论】:

    • 谢谢!我会用我的数据来试试这个。是否可以在数据框中存储逻辑值(如TRUEFALSE)?
    • 确实如此。为了完整起见,我将添加它。
    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2018-01-24
    • 2021-04-19
    • 2019-02-24
    • 2014-12-20
    • 2011-02-24
    相关资源
    最近更新 更多