0

我仍在为不同的应用函数以及它们如何替换 for-next 循环而苦苦挣扎。我想要做的是根据值的排序顺序对带有字符串(值标签)的向量进行排序,在我的例子中是优势比。

我在“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

例如

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

我想知道的是,是否可以用应用函数替换 for-next-loop,如果可以,如何?

在此先感谢,丹尼尔

4

1 回答 1

2

看起来您要做的只是categoryLabels基于的订单oo,这可以通过以下方式完成:

categoryLabels = categoryLabels[order(oo)]

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

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

虽然如果我们确实从soand开始,在这种情况下使用matchoo比使用任何函数要容易得多:apply

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
于 2013-02-27T15:28:34.677 回答