Me gustaría aprender a usar Rcpp . Revisé los documentos en el sitio web de CRAN del paquete, pero creo que sería más útil trabajar en un ejemplo práctico (segunda práctica, considerando convolve3).
Propongo el siguiente código, del paquete robusto de base porque no es ni demasiado largo ni demasiado corto, usa una combinación de tipos R y funciones R y tiene una de esas pequeñas iteraciones aritméticas que son demasiado lentas en R. ¿Cómo harías con Rcpp? -lo?
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))
}
Por favor explique todo lo que pueda.
EDITAR Realmente es la idea de una explicación paso a paso de cómo convertiría un código R bien escrito (y documentado) (por lo que al menos las bases están bien) en una implementación eficiente. La elección del código es discutible un poco al azar, pero creo que refleja la secuencia de comandos típica del arco en nuestros planos (llama a las funciones R que uno no quiere traducir, usa bucles aritméticos ...).
EDIT2 de los comentarios me doy cuenta de que esto puede ser un gran trabajo en C ++ (no me di cuenta al publicar el código). Con respecto a esto, está bien usar piezas individuales como dispositivos pedagógicos. Eventualmente analizaré las piezas juntas editando la pregunta.