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