2015-09-17 25 views
0

我有一個函數myFunction<-function(var1,var2),它使用兩個輸入變量(var1var2),並在幾個計算步驟後返回結果(此結果爲經過幾次迴歸後獲得)。我的兩個輸入變量具有有限的可能值(它們只能在名爲myList的20個整數列表中選擇,而var2必須大於var1)。R - 如何從列表中找到最佳輸入變量,以最大化功能輸出而無循環

我的目標是找到var1var2的最佳組合,以最大化我的函數(總是正數)的輸出。我已經有了兩個for循環的答案,我嘗試了所有可能的組合,但它不是非常快且不像R。

有沒有更有效的方法來找到最好的var1var2最大限度地提高myFunction的結果?

這時我與for循環的解決辦法是這樣的:

myList<-c(5,10,15,20,25,30,35,40,45,50,55,60,75,80,90,105,120,135,150,165,180) 
bestVar1<-0;bestVar2<-0;bestResult<-0 
for (i in myList[(1:length(myList))-1] { 
    otherList<-myList[which(myList>i)] 
    for (j in otherList){ 
     temp<-myFunction(i,j) 
     if (temp>bestResult) {bestResult<-temp;bestVar1<-i;bestVar2<-j} 
    } 
} 
bestVar1;bestVar2;bestResult # to know the results 

編輯:myFunction

myFunction表達的是類似的東西:

myFunction<-function(var1,var2){ 
    columnVar1<-df[,paste0('d',var1);columnVar2<-df[,paste0('d',var2] 
    column_2Var1<-df4[,paste0('d',var1);column_2Var2<-df4[,paste0('d',var2] 
    df2<-cbind(df2,columnVar1,columnVar2) 
    df3<-cbind(df3,column_2Var1,column_2Var2) 
    reg<-lm(x1~.,data=df2) 
    result<-predict(reg,df3) 
} 

所以基本上我有兩個數據幀dfdf4,每列20列(每個可能的值爲myList,它們的移動平均值爲myList)以及兩個其他數據幀df2df3。我在df2上用2個新列進行迴歸分析,然後我預測df3的結果。我只想找到移動平均線的最佳順序以獲得最佳預測值。我簡化了一下myFunction的內容,但這就是主意。

+0

是myFunction一個黑匣子,或者你有它的表達? –

+0

這確實取決於你的函數調用。它原則上是連續的(儘管使用了不連續的輸入選擇),但可能存在漸變方法,但如果它是用於執行大量搜索的更快方法,那麼可以考慮將矢量化步驟... 也許如果你更多明確你的意思是「有效」,也可能對你的問題有其他幫助。 – DH4wes

+0

「有效」我主要是指最快的方式 – etienne

回答

0

你的方式並不壞,如果(如我所料)myFunction沒有向量化。下面的方式可能會更多R -ish,但不是更有效率:

myFunWrap<-function(x) myFunction(x[1],x[2]) 
max(apply(combn(myList,2),2,myFunWrap))