在R中将矩阵划分为列表时的奇怪输出

在R中将矩阵划分为列表时的奇怪输出,r,matrix,functional-programming,R,Matrix,Functional Programming,我一直在尝试编写一个函数,它接受矩阵(x)和向量(cut.vec)并输出一个列表,其中列表的每个元素都是输入矩阵中某些列的组合。输入向量中的每个元素都是一个要对矩阵进行分区的索引。然后我想将每个分区保存到列表中的一个元素,并返回该列表 以下是到目前为止我得到的信息: 这是我正在运行的实际函数: make.cut您可以使用以下方法沿向量“剪切”矩阵: 示例数据: mat <- matrix(1:16, nrow = 2) # [,1] [,2] [,3] [,4] [,5] [,6

我一直在尝试编写一个函数,它接受矩阵(x)和向量(cut.vec)并输出一个列表,其中列表的每个元素都是输入矩阵中某些列的组合。输入向量中的每个元素都是一个要对矩阵进行分区的索引。然后我想将每个分区保存到列表中的一个元素,并返回该列表

以下是到目前为止我得到的信息:

这是我正在运行的实际函数:


make.cut您可以使用以下方法沿向量“剪切”矩阵:

示例数据:

mat <- matrix(1:16, nrow = 2)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]    1    3    5    7    9   11   13   15
# [2,]    2    4    6    8   10   12   14   16

cutvec <- c(2,5)
然后,您可以使用
tapply
创建包含子集的列表:

tapply(seq(ncol(mat)), cuts, function(x) mat[, x, drop = FALSE])

# $`(0,1]`
#      [,1]
# [1,]    1
# [2,]    2
#
# $`(1,4]`
#      [,1] [,2] [,3]
# [1,]    3    5    7
# [2,]    4    6    8

既然你知道索引,也许你可以这样做:
mat=matrix(1:24,nrow=4)
lappy(列表(1:3,4:5),函数(x)作为矩阵(mat[,x]))
?您可以将
cutvec
转换为索引列表,类似于:
cutvec=c(6,8,17)
.ls@MatthewLundberg edit.Done。很抱歉。我希望它更清楚now@alexis_laz我试过了,但问题是,当函数运行时,除了第一次运行之外,它在错误的点剪切。我用示例输入和输出更新了问题,使问题更清楚。谢谢,也许:
.ls
cut.vec<-c(3, 5)

a<-x[,1]
b<-x[,2]
c<-x[,3]

temp <- cbind(a,b,c)

out[[1]] <- temp
a<-x[,4]
b<-x[,5]

temp <- cbind(a,b)

out[[2]] <- temp
mat <- matrix(1:16, nrow = 2)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]    1    3    5    7    9   11   13   15
# [2,]    2    4    6    8   10   12   14   16

cutvec <- c(2,5)
cuts <- cut(seq(ncol(mat)), c(0, cutvec - 1))
tapply(seq(ncol(mat)), cuts, function(x) mat[, x, drop = FALSE])

# $`(0,1]`
#      [,1]
# [1,]    1
# [2,]    2
#
# $`(1,4]`
#      [,1] [,2] [,3]
# [1,]    3    5    7
# [2,]    4    6    8