2016-06-07 52 views
1

我對R有點新,我目前正試圖自動化R中函數參數的所有可能的迭代。我的意思是說,我們有一個帶有五個參數的函數,它們可以是TRUEFALSE。我想運行這些參數的每個可能的組合,並將它們全部轉儲到幾個不同的變量。如何自動化R中函數參數的多個迭代/組合?

鑑於參數​​的數量及其二元性質(10個可能的參數,請選擇5),這會爲該函數創建252個可能的參數組合。有沒有什麼辦法可以使這個過程自動化?或者我堅持在代碼行中生成所有252種可能的組合?我正在使用auto.arima函數,並且想要測試lambda,allowmean,allowdrift,seasonalstationary的所有可能組合。這裏的功能:

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) 

回答

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參數。

+0

謝謝!我會嘗試了這一點我的數據是否可以在數據框中存儲邏輯值(如「TRUE」或「FALSE」)? – heesemonster

+0

可以肯定的是,我只是爲了完整性而添加它。 – lmo