以下代码将 3x3 逻辑矩阵转换为具有 9 个元素的向量:
as.numeric(matrix(rep(FALSE, 9), nrow = 3))
# [1] 0 0 0 0 0 0 0 0 0
为什么会发生这种情况以及如何避免这种情况?抱歉,如果之前有人问过这个问题,我能找到的唯一参考是:https://stackoverflow.com/a/15490316/
一种选择是提前创建一个对象,然后将输出分配回它
m1 <- matrix(rep(FALSE, 9), nrow = 3)
m1[] <- as.numeric(m1)
或者一个黑客选项是
+(matrix(rep(FALSE, 9), nrow = 3))
# [,1] [,2] [,3]
#[1,] 0 0 0
#[2,] 0 0 0
#[3,] 0 0 0
或使用
dim
进行分配
`dim<-`(as.numeric(matrix(rep(FALSE, 9), nrow = 3)), c(3, 3))
如果你有像
+
这样的chr
,那么as.numeric("123")
黑客将不起作用:
+(matrix(as.character(1:9), nrow = 3))
Error in +(matrix(as.character(1:9), nrow = 3)) :
invalid argument to unary operator
另一种选择是使用
apply
在矩阵的每一列(或行)上运行 as.numeric
:
apply(matrix(as.character(1:9), nrow = 3), 2, as.numeric)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9