如何在不使用太多循环的情况下在 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,但我不确定实现这些东西的最佳方法,所以感谢您的帮助!