楼主: 416171205
3419 3

[问答] 如何做才能让sapply不将返回的矩阵拆成向量再合并 [推广有奖]

  • 0关注
  • 1粉丝

已卖:1052份资源

硕士生

88%

还不是VIP/贵宾

-

威望
0
论坛币
814 个
通用积分
1.0081
学术水平
7 点
热心指数
9 点
信用等级
4 点
经验
2203 点
帖子
74
精华
0
在线时间
306 小时
注册时间
2008-11-4
最后登录
2023-2-25

楼主
416171205 发表于 2013-1-2 09:17:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我发现在使用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列的矩阵。。。请大神帮忙,谢谢

二维码

扫码加我 拉你入群

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

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

关键词:apply appl SAP App list 矩阵 function False 如何

沙发
416171205 发表于 2013-1-2 09:34:59
不好意思,程序里面有一个命令需要另外一个package:
library("gregmisc")

藤椅
qoiqpwqr 发表于 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)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
416171205 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
pacifly 发表于 2013-1-4 01:00:39
很简单,先sapply设置成simplify=FALSE,返回一个list结果A,对A用do.call(rbind, A)即可
已有 1 人评分学术水平 热心指数 收起 理由
416171205 + 1 + 1 谢谢,之前没有用过do.call

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 13:26