如何在R中矢量化這個過程而不使用太多循環?如何在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)
}
基本上我需要在放入系統值來獲得HM值{CO,CS,CD,CSD}的每個組合:
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,但我不確定實現這種東西的最佳方式,所以感謝您的幫助!
真棒,我在這個晚上得出了同樣的結論。謝謝 !但是,當我添加第三個ifelse()到HM()時,它不再工作了,你知道爲什麼嗎? http://stackoverflow.com/questions/17252466/why-with-in-r-is-doing-vector-operation-in-one-case-and-not-in-the-other – Wicelo
@Wicelo,它看起來像你已經知道了。問題是'&&'。羅蘭的答案非常好,採用完全矢量化的方法。再見! –