【发布时间】:2012-02-06 16:55:10
【问题描述】:
我想将变量 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 的类型无关?
提前致谢!
PS:背景是f 是f <- predict(mymodel, Xnew) 的结果,其中model 是由model <- svm(Xtrain, Ytrain) 训练的SVM 模型,可以是分类模型(然后f 是因子)或回归模型(然后f 是数字)。我确实知道模型的类型,但上面的 if 子句对我来说似乎有点不方便。
【问题讨论】:
-
你能用 data.frame 代替矩阵吗? Data.frames 在数据类型方面更加灵活,矩阵只接受字符或数字。