0

私はまだ別の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

例えば

  • 「oo」は(0.3、0.7、0.5)です
  • 「そう」は(0.3、0.5、0.7)
  • (ooの)categoryLabelsは( "A"、 "B"、 "C")であり、"so"に従って並べ替える必要があります:("A"、 "C"、 "B")

私が知りたいのは、for-next-loopをapply-functionで置き換えることが可能かどうか、もしそうなら、どのように?

よろしくお願いします、ダニエル

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

soとで始めた場合でも、この場合の関数ooを使用するよりもはるかに簡単なのは、matchを使用することです。apply

categoryLabels = categoryLabels[match(oo, so)]

match2番目のベクトルの最初のベクトルのインデックスを見つける関数です。あなたの例では:

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 に答える