Primero, esta pregunta no se trata de tratar de resolver un problema específico. Como recién llegado a R, también estoy trabajando para crear códigos más eficientes y procedimientos de creación de códigos. Obtener perspectivas sobre diferentes métodos de programación e incluso estilos es la razón detrás de esta pregunta.Proceso de creación de código y funciones incrustadas
A continuación se presentan tres maneras de codificar algo:
primer Estos son los datos ejemplo:
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)
Método uno: ¿Las matemáticas en la función sin definir ningún objeto
ertimesIVCV1 <- function (x)
{ (solve(var(log((x[-nrow(x),])/(x[-1,])))))%*%
((1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1)}
ertimesIVCV1(stackexample)
Método dos: defina objetos en la función y luego manipule esos objetos
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)
Método Tres: Definir varias funciones y llamar a esas funciones en el "Resumen como" función
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)
Así que producir la misma respuesta:
[,1]
[1,] 1.4430104
[2,] -0.1365155
[3,] 11.8088378
pero como se puede ver tres enfoques diferentes.
¿Existe una cantidad óptima de funciones incrustadas o deberíamos siempre intentar enumerar explícitamente todas las operaciones matemáticas? ¿Cuántos niveles de funciones dentro de las funciones es óptimo? ¿Es el método superior en velocidad computacional? ¿Hay una regla general para esto? ¿Cómo te acercas a esto? ¡Cualquier comentario o sugerencia o enlace sería bienvenido y gracias!
Rye
Consulte http://stackoverflow.com/q/4406873/210673, especialmente la respuesta de @GavinSimpson. – Aaron