2

既存の行列のf特定の要素 ( ) に変数を書き込みたいと思います。が要因であると仮定しましょう:indexmf

f <- factor(c(3,3,0,3,0))
m <- matrix(NA, 10, 1)
index <- c(1,4,5,8,9)

使用する

m[index] <- f

mラベル ('1' と '2') を入れますが、元の値 ('0' と '3')には入れないため、望ましい結果が得られません。したがって、私は使用しました

m[index] <- as.numeric(levels(f))[f]

代わりに、これはうまく機能します。

しかし、私の状況でfは、常に要因ではなく、数値のようにすることもできます

f <- c(3.43, 4.29, 5.39, 7.01, 7.15)

私はそれをチェックする必要がありますか?

if ( is.factor(f) ) {
    m[index] <- as.numeric(levels(f))[f]
} else {
    m[index] <- f
}

または、のタイプに関係なく、の「真の」値fを matrixに入れる「普遍的な」方法はありますか?mf

前もって感謝します!

PS: 背景は、によってトレーニングされた SVM モデルはwherefの結果であり、分類モデル (その後は因子) または回帰モデル (その後は数値) のいずれかになります。私はモデルのタイプを知っていますが、上記の if 節は私にはやや不便に思えます。f <- predict(mymodel, Xnew)modelmodel <- svm(Xtrain, Ytrain)ff

4

2 に答える 2

3

なぜこれをしないのですか:最初にf(数値または係数である可能性があります)を文字に変換し、次に数値に変換します。

m[ index ] <- as.numeric( as.character(f) )
于 2012-01-10T13:05:18.250 に答える
1

行列のタイプを「因子」にすることはできません。因子を個別に処理する必要があります。最も簡単なのは、それらを文字列に変換することです。

if(is.factor(f)) {
  m[index] <- as.character(f)
} else {
  m[index] <- f
}
于 2012-01-10T09:17:43.007 に答える