作者celestialgod (攸蓝)
看板R_Language
标题Re: [问题] 多个向量做运算
时间Wed Apr 15 10:37:44 2015
nVector = 8
m = sapply(1:(2^nVector-1), function(x) rev(as.logical(intToBits(x))))
m = m[nrow(m)-(nVector-1):0, ]
vectorLength = 5
vectors = replicate(nVector, rnorm(vectorLength)) # generating data
# 你的资料就简单把他们都cbind起来就好 vectors = cbind(A, B, .., H)
result = apply(m, 2, function(x) rowSums(matrix(vectors[,x], vectorLength)))
如果你要依照和的个数做分组,就把m根据colSums做split就好了
m2 = split(m, t(replicate(nVector, colSums(m))))
m2 = lapply(m2, function(x) matrix(x, nVector))
result = lapply(m2, function(m){ apply(m, 2, function(x){
rowSums(matrix(vectors[,x], vectorLength))
})
})
PS: 这个idea是在MATLAB学到的,想不到R这样用也很快XD
※ 引述《penolove5566 (轻划)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 大家好
: 我有多个向量A,B,C,,...,H
: 我想要计算向量和,但我要计算所有情况的向量和
: 比如说 A+B, A+C, ... , A+H, B+C, ... , G+H, A+B+C,..., A+B+C+D+E+F+G+H.
: 我现在的作法是
: 用 gtools 的 combinations 列出 各种组合数 C7取1 ... C7取7
: 再用这些元素去命令刚刚的向量相加
: 请问有没有较简易的做法?
: 谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.205.27.107
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1429065467.A.E0F.html
※ 编辑: celestialgod (123.205.27.107), 04/15/2015 11:01:11
1F:推 penolove5566: 有懂有推,我写超长一串 哈哈 04/16 15:41
2F:→ penolove5566: 一开始也是查apply 但那时不知道怎麽用 04/16 15:43
3F:推 penolove: 楼上伪物 04/16 21:21