Prima di tutto questa domanda non riguarda il tentativo di risolvere un problema specifico. Come nuovo arrivato a R, sto anche lavorando per creare codice più efficiente e procedure di creazione del codice. Ottenere le prospettive su diversi metodi di programmazione e persino stili è la ragione alla base di questa domanda.Code Building Process and Embedded Functions
Qui di seguito sono tre modi per codificare qualcosa:
Primo Ecco i dati di esempio:
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)
Un metodo: Fare la matematica nella funzione senza definire alcun oggetto
ertimesIVCV1 <- function (x)
{ (solve(var(log((x[-nrow(x),])/(x[-1,])))))%*%
((1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1)}
ertimesIVCV1(stackexample)
Metodo due: Definire gli oggetti nella funzione e quindi manipolare quegli oggetti
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)
Metodo Tre: definire diverse funzioni e chiamare queste funzioni in "sintesi come" funzione
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)
Quindi tutto produrre la stessa risposta:
[,1]
[1,] 1.4430104
[2,] -0.1365155
[3,] 11.8088378
ma come si può vedere tre diversi approcci.
Esiste un numero ottimale di funzioni incorporate o dovremmo sempre cercare di elencare esplicitamente tutta la matematica? Quanti livelli di funzioni all'interno delle funzioni sono ottimali? L'uno o l'altro metodo è superiore alla velocità di calcolo? C'è una regola generale per questo? Come ti avvicini a questo? Eventuali commenti o suggerimenti o collegamenti sarebbero benvenuti e grazie!
Rye
Vedere http://stackoverflow.com/q/4406873/210673, in particolare la risposta di @ GavinSimpson. – Aaron