Я хотів би навчитися використовувати Rcpp . Я переглянув документи на веб-сайті CRAN пакету, але мені здається, що робота над практичним прикладом (другий практичний, враховуючи convolve3) була б більш корисною.
Я пропоную наступний код із пакета robustbase, тому що він не є занадто довгим і не занадто коротким, використовує комбінацію типів R і R функцій і має одну з тих малих арифметичних ітерацій, які занадто повільні в Р. Як би ви пішли про Rcpp -інг?
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))
}
Поясніть, будь ласка, стільки, скільки можете.
EDIT Це дійсно ідея поетапного пояснення того, як ви хочете перетворити добре написаний (і задокументований) код R (так що, принаймні, з основами) в ефективну реалізацію. Вибір коду доводиться дещо випадковим, але я думаю, що він відображає типовий для арки сценарій на наших кресленнях (викликає функції R, які ніхто не хоче перекладати, використовує арифметичні петлі ....).
EDIT2 з коментарів, я розумію, що це насправді може бути великою справою в C ++ (я не усвідомлював цього під час публікації коду). У зв'язку з цим нормально використовувати окремі твори як педагогічні прилади. Зрештою я розберу деталі разом, відредагувавши питання.