我遵循了有关R语言的教程https://www.datamentor.io/r-programming/matrix/,该教程介绍了在索引矩阵而不是向量后如何保留返回的矩阵。但是,它不起作用,返回的矩阵的类别仍然是向量
我尝试使用一个逗号,然后使用两个逗号,如本教程中所示。
[1] 3 6 9
> class(x[x%%3==0])
[1] "integer"
> x[x%%3==0, drop=FALSE]
[1] 3 6 9
> class(x[x%%3==0, drop=FALSE])
[1] "integer"
> x[x%%3==0,, drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] :
(subscript) logical subscript too long
> x[x%%3==0,,.drop=FALSE]
Error in x[x%%3 == 0, , .drop = FALSE] : incorrect number of dimensions
> x[x%%3==0,,drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] :
(subscript) logical subscript too long
> class(x[x%%3==0, drop=FALSE])
[1] "integer"
该类仍然是整数,而不是矩阵,而drop = FALSE应该是这样做的
答案 0 :(得分:0)
的输出
x %% 3==0
# A B C
#X FALSE FALSE FALSE
#Y FALSE FALSE FALSE
#Z TRUE TRUE TRUE
是逻辑矩阵
使用逻辑矩阵对初始矩阵进行子集化可以根据TRUE
的位置给出元素
which(x%%3 == 0)
#[1] 3 6 9
在提取中获得的matrix
中的值相同,这不会区分任何行,例如
x > 3
# A B C
#X FALSE TRUE TRUE
#Y FALSE TRUE TRUE
#Z FALSE TRUE TRUE
x[x > 3]
#[1] 4 5 6 7 8 9
为了这样提取行,我们可能需要获取逻辑向量。一种选择是rowSums
,并与列数进行比较
x[rowSums(x %%3 == 0) == ncol(x),, drop = FALSE]
# A B C
#Z 3 6 9
x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))