あまりにも多くのループを使用せずに R でこのプロセスをベクトル化する方法は?
私はこの機能を持っています:
HM=function(CO,CS,CD,CSD){
if(CO-CS)>1){
return(2^(CS)/(2^(CO)-2^(CSD)))
}
else if(CO-CD)>1){
return(1-2^(CD)/(2^(CO)-2^(CSD)))
}
return(0)
}
基本的に、これらの値に対する {CO,CS,CD,CSD} のすべての組み合わせの HM 値を取得する必要があります。
CO 25.76031685 25.71126747 25.90163231
CS 24.40528297 24.09929848 23.51999092
CD 25.99405861 25.72906113 25.61374474
CSD 35.94195557 36.07263184 34.00024414
だから私はそれらの値を取得する必要があります:
HM(25.76031685,24.40528297,25.99405861,35.94195557)
HM(25.71126747,24.40528297,25.99405861,35.94195557)
HM(25.90163231,24.40528297,25.99405861,35.94195557)
HM(25.76031685,24.09929848,25.99405861,35.94195557)
HM(25.71126747,24.09929848,25.99405861,35.94195557)
HM(25.90163231,24.09929848,25.99405861,35.94195557)
HM(25.76031685,23.51999092,25.99405861,35.94195557)
HM(25.71126747,23.51999092,25.99405861,35.94195557)
HM(25.90163231,23.51999092,25.99405861,35.94195557)
etc...
基本的には、3 つの要素の 4 つのベクトルとのすべての組み合わせです。
Vectors :
a=c(1,2,3)
b=c(1,2,3)
c=c(1,2,3)
d=c(1,2,3)
Combinations :
1,1,1,1
2,1,1,1
1,2,1,1
1,1,2,1
1,1,1,2
3,1,1,1
1,3,1,1
etc...
組み合わせ数の数え方がわかりません。もちろん、4 つのネストされたループを使用することもできますが、R はループに対して遅すぎるため、ベクトル化でそれを行う方法を学びたいと考えています。expand.grid を使用できると思いますが、方法がわかりません。また、テーブルはExcelにあり、.csvでエクスポートできますが、このようなものを実装する最良の方法がわからないので、助けてくれてありがとう!