【发布时间】:2012-02-28 19:36:28
【问题描述】:
首先,这个问题不是关于尝试解决特定问题。作为 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)
方法三:定义几个函数并在“summary like”函数中调用这些函数
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
但是您可以看到三种不同的方法。
是否存在最佳数量的嵌入式函数,或者我们是否应该始终尝试明确列出所有数学运算?函数中有多少层函数是最优的?任何一种方法在计算速度上都更优越吗?这有经验法则吗?你如何处理这个问题?欢迎任何 cmets 或建议或链接,谢谢!
黑麦
【问题讨论】:
-
见stackoverflow.com/q/4406873/210673,尤其是@GavinSimpson 的回答。