为什么 as.numeric 将矩阵转换为向量,以及如何将结果保留为矩阵?

问题描述 投票:0回答:2

以下代码将 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/

r matrix coercion
2个回答
2
投票

一种选择是提前创建一个对象,然后将输出分配回它

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))

0
投票

如果你有像

+
这样的
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
© www.soinside.com 2019 - 2024. All rights reserved.