2010-01-13 33 views
1

我試圖使用功能與在R.一些分類代碼爲便於預測,我們將在這篇文章中,我們有兩個向量命名阿爾法承擔和的β每個僅包含0和1我尋找一個簡單而有效的方式來傳遞阿爾法測試的所有組合預測使用外()與預測()

我已經構建了下面的代碼,以模仿從MASS庫中的LDA功能,因此而不是「LDA」中,我使用「分類」。重要的是要注意,預測方法預測取決於(alpha,beta)對。

當然,我可以用一個嵌套循環來做到這一點,但我想避免這種方法。

這裏是我想什麼,做理想:

alpha <- seq(0, 1) 
beta <- seq(0, 1) 
classifier.out <- classifier(training.data, labels) 
outer(X=alpha, Y=beta, FUN="predict", classifier.out, validation.data) 

這是一個問題,因爲阿爾法測試不在前兩個參數預測

因此,爲了解決這個問題,我改變了最後一行

outer(X=alpha, Y=beta, FUN="predict", object=classifier.out, data=validation.data) 

請注意,我的驗證的數據有40個觀測,並有4個可能的對阿爾法公測。雖然我說錯誤

dims [product 4] do not match the length of object [40] 

我已經嘗試了一些其他的東西,其中一些工作,但是很不簡單。有什麼建議麼?

回答

3

的問題是,外預計其功能要矢量(即,它將調用與所有它都想執行的自變量的向量ONCE預測)。因此,當地預測被調用一次,返回它的結果(其恰好是長度4),外抱怨,因爲它不等於解決這個問題是使用Vectorize預期的40

一種方式未經測試的代碼:

outer(X=alpha, Y=beta, FUN=Vectorize(predict, vectorize.args=c("alpha", "beta")), object=classifier.out, data=validation.data) 
0

我想出了一個體面的方式來做到這一點。這是它:

pairs <- expand.grid(alpha, beta) 
names(pairs) <- c("alpha", "beta") 
mapply(predict, pairs$alpha, pairs$beta, 
    MoreArgs=list(object=classifier.out, data=validation.data)) 

任何人都有更簡單,更有效率的東西?我非常渴望知道,因爲我在這個問題上花了太長時間。 :(

+0

這不完全清楚,我在那裏你可以嘗試定義你自己的函數:myPredict < - function(alpha,beta) {預測(object = classifier.out,data = validation.data,x1 = alpha,x2 = beta)}。然後mapply可以調用myPredict。 – 2010-01-13 06:39:34