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
: 再用这些元素去命令刚刚的向量相加
: 请问有没有较简易的做法?
: 谢谢!