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

没有给出期望的结果,因为它将标签('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

提前致谢!

PS:背景是SVM模型训练的f结果f <- predict(mymodel, Xnew),可以是分类模型(然后是因子)或回归模型(然后是数字)。我确实知道模型的类型,但上面的 if 子句对我来说似乎有点不方便。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 回答