因素,水平和原始值

时间:2012-01-10 08:48:48

标签: r r-factor

我想将变量f写入现有矩阵index的某些元素(m)中。我们假设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的类型无关?

提前致谢!

PS:背景是ff <- predict(mymodel, Xnew)的结果,其中model是由model <- svm(Xtrain, Ytrain)训练的SVM模型,可以是一个分类模型(然后f是因子)或回归模型(然后f是数字)。我确实知道模型的类型,但上面的if子句对我来说似乎有点不方便。

2 个答案:

答案 0 :(得分:3)

为什么不这样做:首先将f(可以是数字或因子)转换为字符,然后转换为数字:

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

答案 1 :(得分:1)

矩阵的类型不能是“因子”:您必须分别处理因子。 最简单的方法是将它们转换为字符串。

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