我有一个矩阵,就像用这段代码生成的矩阵:
> m = matrix(data=c(1:50), nrow= 10, ncol = 5);
> colnames(m) = letters[1:5];
Run Code Online (Sandbox Code Playgroud)
如果我过滤列,并且结果有多个列,则新矩阵会保留名称.例如:
> m[, colnames(m) != "a"];
b c d e
[1,] 11 21 31 41
[2,] 12 22 32 42
[3,] 13 23 33 43
[4,] 14 24 34 44
[5,] 15 25 35 45
[6,] 16 26 36 46
[7,] 17 27 37 47
[8,] 18 28 38 48
[9,] 19 29 39 49
[10,] 20 30 40 50
Run Code Online (Sandbox Code Playgroud)
请注意,这里的类仍然是矩阵:
> class(m[, colnames(m) != "a"]);
[1] "matrix"
Run Code Online (Sandbox Code Playgroud)
但是,当过滤器只允许一列时,结果是向量(在这种情况下为整数向量)和列名称丢失.
> m[, colnames(m) == "a"]
[1] 1 2 3 4 5 6 7 8 9 10
> class(m[, colnames(m) == "a"]);
[1] "integer"
Run Code Online (Sandbox Code Playgroud)
列的名称非常重要.
我想保留矩阵结构(一列矩阵)和列名.
但是,列的名称更重要.
我已经知道如何解决这个问题(通过跟踪每个案例).我想知道是否有一个优雅,有启发性的解决方案.
mne*_*nel 14
你需要设置drop = FALSE.这是编程使用的好习惯
下降
对于矩阵和数组.如果为TRUE,则将结果强制转换为可能的最低维度(请参阅示例)
m[,'a',drop=FALSE]
Run Code Online (Sandbox Code Playgroud)
这也将保留名称.