Ich würde gerne lernen, Rcpp zu benutzen . Ich habe die Dokumente auf der CRAN-Website des Pakets durchgesehen, aber ich bin der Meinung, dass die Arbeit an einem praktischen Beispiel (zweites Praktikum unter Berücksichtigung von convolve3) hilfreicher wäre.
Ich schlage den folgenden Code aus dem Robustbase- Paket vor, da er weder zu lang noch zu kurz ist, eine Kombination aus R-Typen und R-Funktionen verwendet und eine dieser kleinen arithmetischen Iterationen enthält, die in R zu langsam sind. Wie würden Sie mit Rcpp umgehen? -ing es?
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))
}
Bitte erklären Sie so viel wie möglich.
BEARBEITEN Es ist wirklich die Idee einer schrittweisen Erklärung, wie Sie einen gut geschriebenen (und dokumentierten) R-Code (zumindest die Grundlagen sind in Ordnung) in eine effiziente Implementierung konvertieren würden. Die Wahl des Codes ist ein bisschen zufällig, aber ich denke, es spiegelt das arch-typische Skript auf unseren Blaupausen wider (ruft R-Funktionen auf, die man nicht übersetzen möchte, verwendet arithmetische Schleifen ...).
EDIT2 aus den Kommentaren Ich erkenne , dass dies tatsächlich eine große Arbeit in C ++ sein kann (ich habe es nicht bemerkt, als ich den Code gepostet habe ). In diesem Zusammenhang ist es in Ordnung, einzelne Stücke als pädagogische Hilfsmittel zu verwenden. Ich werde die Teile schließlich zusammen analysieren, indem ich die Frage bearbeite.