Re: [問題] 多個向量做運算

作者: celestialgod (天)   2015-04-15 10:37:44
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
: 再用這些元素去命令剛剛的向量相加
: 請問有沒有較簡易的做法?
: 謝謝!
作者: penolove5566 (輕劃)   2015-04-16 15:41:00
有懂有推,我寫超長一串 哈哈一開始也是查apply 但那時不知道怎麼用
作者: penolove (醜獸的女朋友)   2015-04-16 21:21:00
樓上偽物

Links booklink

Contact Us: admin [ a t ] ucptt.com