2013-02-27 90 views
0

我仍然在努力應對不同的應用功能,以及它們如何取代一個for-next-loop。我想要做的是按照排序的值順序排序帶有字符串(值標籤)的矢量,在我的情況下比值比。如何使用apply函數和apply-family的函數?

我有「oo」對象的優勢比(無序)和so對象中的排序/排序賠率值。此外,我有相同的順序進行排序爲「OO」值標籤,現在應重新orderd於「因此」對象中的值匹配:

# sort labels descending in order of 
# odds ratio values 
oo <- exp(coef(x))[-1] 
so <- sort(exp(coef(x))[-1]) 
nlab <- NULL 
for (k in 1:length(categoryLabels)) { 
    nlab <- c(nlab, categoryLabels[which(so[k]==oo)]) 
} 
categoryLabels <- nlab 

例如

  • 「OO」 是(0.3,0.7,0.5)
  • 「所以」 是(0.3,0.5,0.7)
  • categoryLabels(的OO)是( 「A」, 「B」,「 (「A」,「C」,「B」)重新排序

我想知道的是,如果可以替換for-next通過應用功能進行循環,如果是這樣,怎麼辦?

由於提前, 丹尼爾

+0

'categoryLabels'元素與'oo'元素的起始順序是否相同?如果是這樣,'ord < - order(00)'後跟'so < - oo [ord]'和'categoryLabels < - categoryLabels [ord]'應該這樣做。更好的辦法是將'oo'變成一個名爲* vector的矢量,並將'names'屬性設置爲'categoryLabels',然後對'oo'進行排序。當然,這就是我在這個評論的第一句話中詢問的假設。 「 – 2013-02-27 15:30:56

+0

」categoryLabels元素與oo元素的起始順序相同嗎?「 - 是的,「oo」是包含OR值的「原始賠率」,並且分類標籤與這些OR相關(即相同的「無序」訂單)。 「所以」應該是「排序的賠率」。訂單功能工作正常,我使用了David提出的實現。 – Daniel 2013-02-28 08:51:33

回答

2

它看起來像所有你想要做的是基於oo爲了categoryLabels,這可能與做:

categoryLabels = categoryLabels[order(oo)] 

order給你的矢量當用於索引向量時,會將其轉換爲排序順序。在您的例子:

oo = c(0.3, 0.7, 0.5) 
order(oo) 
# [1] 1 3 2 

但如果我們沒有與sooo,比在這種情況下,使用任何apply功能更容易開始將使用match

categoryLabels = categoryLabels[match(oo, so)] 

match是找到一個函數第二個向量中第一個向量的索引。在你的例子中:

oo = c(0.3, 0.7, 0.5) 
so = c(0.3, 0.5, 0.7) 
match(oo, so) 
# [1] 1 3 2 
+0

謝謝大衛!正常工作,我再次深入到R語法和編碼! – Daniel 2013-02-28 08:48:26

相關問題