Rcpp kullanmayı öğrenmek istiyorum . Paketin CRAN web sitesindeki dokümanlardan geçtim, ancak pratik bir örnek üzerinde çalıştığımı hissediyorum (ikinci pratik, convolve3 göz önüne alındığında) daha yararlı olacaktır.
Sağlam taban paketinden aşağıdaki kodu öneriyorum çünkü ne çok uzun ne de çok kısa, R türleri ve R işlevlerinin bir kombinasyonunu kullanıyor ve R'de çok yavaş olan bu küçük aritmetik yinelemelerden birine sahip. -ing?
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))
}
Lütfen olabildiğince açıklayın.
EDIT Gerçekten iyi yazılmış (ve belgelenmiş) bir R kodu (böylece en azından temelleri iyi) verimli bir uygulamaya dönüştürme hakkında nasıl adım adım bir açıklama fikri. Kod seçimi biraz rastgele tartışılabilir ama ben bizim planları üzerinde kemer tipik komut dosyası yansıtır düşünüyorum (bir çevirmek istemiyor R fonksiyonları çağırır, aritmetik döngüler kullanır ....).
EDIT2 yorumlardan bu aslında C ++ (i kodu gönderirken fark etmedi) yapmak için büyük bir iş olabilir farkında. Bu bağlamda, bireysel parçaları pedagojik cihazlar olarak kullanmak tamamdır. Sonunda soruyu düzenleyerek parçaları bir araya getireceğim.