为什么将R分裂矩阵中的split()转换为向量,如何得到矩阵结果?

Dav*_*Lee 5 split r matrix

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

x <- matrix(rnorm(15),5,3)
idx <- rbinom(5,1,0.5)
split(x,idx)
Run Code Online (Sandbox Code Playgroud)

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

x <- as.data.frame(matrix(rnorm(15),5,3))
idx <- rbinom(5,1,0.5)
split(x,idx)
Run Code Online (Sandbox Code Playgroud)

我想知道有没有没有转换矩阵到数据帧和结果仍然在矩阵格式?为什么会这样?

the*_*ail 2

split.data.frame(x,idx)或许?这将迫使split操作将您视为matrixa data.frame,而不是vector具有维度的 a (本质上描述了 a matrix)。

示例显示它给出了基本相同的结果,但返回matrix的是a data.frame

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
Run Code Online (Sandbox Code Playgroud)