如何使用apply函数和apply-family的哪些功能?

时间:2013-02-27 15:23:22

标签: r apply

我仍在努力应对不同的apply-function以及它们如何替换for-next-loop。我想要做的是根据值的排序顺序对带有字符串(值标签)的向量进行排序,在我的情况下,比值比。

我在“oo”对象中有优势比(无序),在so对象中有排序/有序的赔率值。此外,我的值标签按照与“oo”相同的顺序排序,现在应该重新排序以匹配“so”对象中的值:

# 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

e.g。

  • “oo”是(0.3,0.7,0.5)
  • “so”是(0.3,0.5,0.7)
  • categoryLabels(of oo)是(“A”,“B”,“C”),应根据“so”重新排序:(“A”,“C”,“B”)

我想知道的是,如果可以通过apply-function替换for-next-loop,如果是,那该怎么办?

提前致谢, 丹尼尔

1 个答案:

答案 0 :(得分:2)

看起来您要做的就是根据categoryLabels订购oo,这可以通过以下方式完成:

categoryLabels = categoryLabels[order(oo)]

order为您提供索引向量,当用于索引向量时,会将其转换为排序顺序。在您的示例中:

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

虽然我们确实从sooo开始,但在这种情况下使用match比使用任何apply函数要容易得多{/ 3}}:

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