首先,這個問題不是試圖解決特定的問題。作爲R的新手,我也在努力創建更高效的代碼和代碼構建過程。獲得對不同編程方法甚至風格的看法是這個問題背後的原因。代碼構建過程和嵌入式功能
以下三種方式來編寫的東西:
首先這裏的示例數據:
stackexample <- c(52,50,45,49.5,50.5,12,10,14,11.5,12,110,108,106,101,104)
dim(stackexample)<- c(5,3)
方法一:不要在該函數的數學沒有定義任何對象
ertimesIVCV1 <- function (x)
{ (solve(var(log((x[-nrow(x),])/(x[-1,])))))%*%
((1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1)}
ertimesIVCV1(stackexample)
方法二:在函數中定義對象,然後操縱這些對象
ertimesIVCV2 <- function (x)
{ IVCV <- solve(var(log((x[-nrow(x),])/(x[-1,]))));
retsexcess <- (1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1;
IVCV%*%retsexcess}
ertimesIVCV2(stackexample)
方法三:定義幾個函數和調用這些函數在「總之喜歡」功能
IVCV <- function (x) {solve(var(log((x[-nrow(x),])/(x[-1,]))))}
retsexcess <- function(x) (1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1
ertimesIVCV3 <- function (x) {IVCV(x)%*%retsexcess(x)}
ertimesIVCV3(stackexample)
因此,所有產生相同的答案:
[,1]
[1,] 1.4430104
[2,] -0.1365155
[3,] 11.8088378
,但你可以看到三種不同的方法。
作爲嵌入式函數的最佳數量是否存在這樣的事情?或者我們是否應該總是試圖明確列出所有數學?功能內多少層次的功能是最優的?在計算速度方面哪一種方法優越?這是否有一個經驗法則?你如何解決這個問題?任何意見或建議或鏈接將受到歡迎,並感謝你!
黑麥
請參閱http://stackoverflow.com/q/4406873/210673,尤其是@ GavinSimpson的回答。 – Aaron 2012-02-28 19:41:33