2012-01-10 94 views
0

我想將變量f寫入現有矩陣m的某些元素(index)。假設f是一個因素:因子,級別和原始值

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

使用

m[index] <- f 

,因爲它使標籤沒有得到期望的結果(「1」和「2」)爲m,但不是原來的值( '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的「真實」值放入矩陣m中,與f的類型無關?

在此先感謝!

P.S .:背景是ff <- predict(mymodel, Xnew)的結果,其中model是由model <- svm(Xtrain, Ytrain)培養了SVM模型,並且可以是是classfication模型(然後f是因子)或迴歸模型(然後f是數字)。我知道模型的類型,但上面的if子句對我來說似乎有點不方便。

+2

你可以使用一個data.frame,而不是一個矩陣?數據類型在數據類型方面更加靈活,矩陣只接受字符或數字。 – 2012-01-10 09:57:57

回答

3

爲什麼不只是這樣做:先轉換f(可以是數字或因子)字符,然後以數字:

m[ index ] <- as.numeric(as.character(f)) 
+0

謝謝,這很好,很簡單,似乎適用於所有情況! – Kilian 2012-01-10 16:30:40

1

矩陣的類型不能是「因素」:您將不得不分別處理因素。 最簡單的可能是將它們轉換爲字符串。

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