为什么在R中将split()分解为向量,如何获得矩阵结果?

Why split() in R split matrix into vector and how can I get the matrix result?

我想将矩阵分成两部分。我使用了以下代码

1
2
3
x <- matrix(rnorm(15),5,3)
idx <- rbinom(5,1,0.5)
split(x,idx)

但是,我得到了两个向量而不是两个矩阵。我知道是否将x转换为data.frame将得到我想要的。即

1
2
3
x <- as.data.frame(matrix(rnorm(15),5,3))
idx <- rbinom(5,1,0.5)
split(x,idx)

我想知道是否有没有将矩阵转换为数据帧而结果仍为矩阵格式的方法?以及为什么会这样?


split.data.frame(x,idx)也许?这将迫使split操作将matrix视为data.frame,而不是具有尺寸(实质上描述了matrix的)vector

显示示例的结果基本相同,但返回的是matrix而不是data.frame

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
set.seed(1)
x <- matrix(rnorm(15),5,3)
idx <- rbinom(5,1,0.5)
split.data.frame(x,idx)
#$`0`
#           [,1]       [,2]       [,3]
#[1,] -0.6264538 -0.8204684  1.5117812
#[2,] -0.8356286  0.7383247 -0.6212406
#[3,]  1.5952808  0.5757814 -2.2146999
#
#$`1`
#          [,1]       [,2]      [,3]
#[1,] 0.1836433  0.4874291 0.3898432
#[2,] 0.3295078 -0.3053884 1.1249309

split(data.frame(x),idx)
#$`0`
#          X1         X2         X3
#1 -0.6264538 -0.8204684  1.5117812
#3 -0.8356286  0.7383247 -0.6212406
#4  1.5952808  0.5757814 -2.2146999
#
#$`1`
#         X1         X2        X3
#2 0.1836433  0.4874291 0.3898432
#5 0.3295078 -0.3053884 1.1249309


您可以通过行子设置来执行此操作。使用提供的xidx

1
2
split_x <- list(x_a= x[idx == 1,],
                x_b= x[idx != 1,])