我仍在努力应对不同的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。
我想知道的是,如果可以通过apply-function替换for-next-loop,如果是,那该怎么办?
提前致谢, 丹尼尔
答案 0 :(得分:2)
看起来您要做的就是根据categoryLabels
订购oo
,这可以通过以下方式完成:
categoryLabels = categoryLabels[order(oo)]
order为您提供索引向量,当用于索引向量时,会将其转换为排序顺序。在您的示例中:
oo = c(0.3, 0.7, 0.5)
order(oo)
# [1] 1 3 2
虽然我们确实从so
和oo
开始,但在这种情况下使用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