R 保留行名的子集矩阵

R 保留行名的子集矩阵,r,matrix,performance,R,Matrix,Performance,我试图将一个矩阵子集,这样我只得到第一个变量大于第二个变量的矩阵。我有一个矩阵out,它是一个3000x2矩阵 我试过了 out<-out[out[,1] > out[,2]] out[,2]] 但这就完全消除了row.names,我得到了一个介于1到3000之间的整数字符串。是否有办法保留行。名称?矩阵被R视为包含列和行的向量 > A <- matrix(1:9, ncol=3) # A is filled with 1,...,9 columnwise >

我试图将一个矩阵子集,这样我只得到第一个变量大于第二个变量的矩阵。我有一个矩阵
out
,它是一个
3000x2
矩阵

我试过了

out<-out[out[,1] > out[,2]]
out[,2]]

但这就完全消除了row.names,我得到了一个介于1到3000之间的整数字符串。是否有办法保留
行。名称

矩阵被R视为包含列和行的向量

> A <- matrix(1:9, ncol=3)

# A is filled with 1,...,9 columnwise
> A
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

# only elements with even number in 2nd column of same row

> v <- A[A[,2] %% 2 == 0]

> m <- A[A[,2] %% 2 == 0,]

> v
[1] 1 3 4 6 7 9

> m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    3    6    9

# The result of evaluating odd/even-ness of middle column.
# This boolean vector is repeated column-wise by default
# until all element's fate in A is determined.

> A[,2] %% 2 == 0
[1]  TRUE FALSE  TRUE
>A
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
#仅在同一行的第二列中具有偶数的元素
>v m v
[1] 1 3 4 6 7 9
>m
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    3    6    9
#计算中间列奇偶性的结果。
#默认情况下,此布尔向量按列重复
#直到A中所有元素的命运确定为止。
>A[,2]%2==0
[1] 真假假真
如果省略逗号(
v
),则将
A
作为一维数据结构进行寻址,而R隐式地将表达式作为向量进行处理


在这个意义上,v不是“整数串”,而是整数向量。当您添加逗号时,您告诉R您的条件只处理第一个维度,同时指示第二个维度(在逗号之后)——这导致R将表达式作为矩阵(
m
)处理。

注意,如果您只返回一行的子集以形成一个维度为单位的矩阵,R将删除行名称:


m你只需要一个逗号
out[out[,1]>out[,2],]
@NealFultz:你应该把它作为一个答案发布出来。。。也许可以解释为什么需要逗号;)这是解决这个问题最好的方法。