Vorrei imparare a usare Rcpp . Ho esaminato i documenti sul sito Web CRAN del pacchetto, ma mi sento di lavorare su un esempio pratico (secondo pratico, considerando convolve3) sarebbe più utile.
Propongo il seguente codice, dal pacchetto robustbase perché non è né troppo lungo né troppo corto, usa una combinazione di tipi R e funzioni R e ha una di quelle piccole iterazioni aritmetiche che sono troppo lente in R. Come andresti su Rcpp -ing it?
scaleTau2<-function (x, c1 = 4.5, c2 = 3, consistency = TRUE, mu.too = FALSE){
n <- length(x)
medx <- median(x)
x. <- abs(x - medx)
sigma0 <- median(x.)
mu <- if (c1 > 0) {
x. <- x./(sigma0 * c1)
w <- 1 - x. * x.
w <- ((abs(w) + w)/2)^2
sum(x * w)/sum(w)
}
else medx
x <- (x - mu)/sigma0
rho <- x^2
rho[rho > c2^2] <- c2^2
if (!identical(consistency, FALSE)) {
Erho <- function(b) 2*((1-b^2)*pnorm(b)-b*dnorm(b)+b^2)-1
Es2 <- function(c2) Erho(c2*qnorm(3/4))
nEs2 <-ifelse(consistency == "finiteSample",n-2,n)*Es2(c2)
}
else nEs2 <- n
c(if (mu.too) mu, sigma0 * sqrt(sum(rho)/nEs2))
}
Per favore, spiega il più possibile.
EDIT È davvero l'idea di una spiegazione dettagliata di come si andrebbe per convertire un codice R ben scritto (e documentato) (quindi almeno le basi vanno bene) in un'implementazione efficiente. La scelta del codice è discutibile in modo un po 'casuale, ma penso che rifletta lo script tipico dell'arco sui nostri progetti (chiama funzioni R che non si desidera tradurre, utilizza loop aritmetici ....).
EDIT2 dai commenti mi rendo conto che questo potrebbe effettivamente essere un grosso lavoro da fare in C ++ (non me ne sono reso conto quando ho pubblicato il codice). Al riguardo, va bene usare singoli pezzi come dispositivi pedagogici. Alla fine analizzerò i pezzi modificando la domanda.