全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3367 3
2013-01-02
我发现在使用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列的矩阵。。。请大神帮忙,谢谢

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-2 09:34:59
不好意思,程序里面有一个命令需要另外一个package:
library("gregmisc")
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-2 12:20:25
temp <- 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]),])
})

do.call(rbind, temp)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-4 01:00:39
很简单,先sapply设置成simplify=FALSE,返回一个list结果A,对A用do.call(rbind, A)即可
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群