我发现在使用SAPPLY时,如果指定simplify是False,返回的是list,如果指定TRUE,它会把返回的矩阵变成向量再合并,如何才能让他不把矩阵先变成向量再合并,而是直接合并。。
比如:
per.temp.1<-c("8,2,7,6,5,12,10,9,13,11","8,2,7,6,5,12,9,10,13,11","8,2,7,6,5,12,11,9,14,10","8,2,7,6,5,12,9,11,14,10","8,2,7,6,5,12,11,10,15,9","8,2,7,6,5,12,10,11,15,9","8,2,6,7,5,12,10,9,13,11","8,2,6,7,5,12,9,10,13,11","8,2,6,7,5,12,11,9,14,10","8,2,6,7,5,12,9,11,14,10")
a<-c(2,3,4,5)
b<-c(12,13,14,15)
sapply(per.temp.1,simplify=FALSE,USE.NAMES = FALSE,function(x) {
z2j<-t(matrix(as.numeric(unlist(strsplit(x,","))),ncol=1))
temp.1<-permutations(length(setdiff(a,z2j)),length(setdiff(a,z2j)),setdiff(a,z2j))
temp.2<-permutations(length(setdiff(b,z2j)),length(setdiff(b,z2j)),setdiff(b,z2j))
cbind(temp.1[rep(1:dim(temp.1)[1],each=dim(temp.2)[1]),],z2j[rep(1,(dim(temp.1)[1]*dim(temp.2)[1])),],temp.2[rep(1:dim(temp.2)[1],times=dim(temp.1)[1]),])
})
结果是这样的:
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] 3 4 8 2 7 6 5 12 10 9 13 11 14 15
[2,] 3 4 8 2 7 6 5 12 10 9 13 11 15 14
[3,] 4 3 8 2 7 6 5 12 10 9 13 11 14 15
[4,] 4 3 8 2 7 6 5 12 10 9 13 11 15 14
...
[[10]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] 3 4 8 2 6 7 5 12 9 11 14 10 13 15
[2,] 3 4 8 2 6 7 5 12 9 11 14 10 15 13
[3,] 4 3 8 2 6 7 5 12 9 11 14 10 13 15
[4,] 4 3 8 2 6 7 5 12 9 11 14 10 15 13
我希望返回的是4*10行,14列的一个大矩阵(其实就是将10个矩阵直接按行合并),但是当我设定simplify=TRUE时,返回的是一个14*4行,10列的矩阵。。。请大神帮忙,谢谢