Tôi muốn học cách sử dụng Rcpp . Tôi đã xem qua các tài liệu trên trang web CRAN của gói, nhưng tôi cảm thấy làm việc trên một ví dụ thực tế (thực tế thứ hai, xem xét kết hợp3) sẽ hữu ích hơn.
Tôi đề xuất mã sau đây, từ gói Strongbase vì nó không quá dài cũng không quá ngắn, sử dụng kết hợp các loại R và hàm R và có một trong những lần lặp số học nhỏ đó quá chậm trong R. Bạn sẽ đi về Rcpp như thế nào -ing nó?
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))
}
Hãy giải thích càng nhiều càng tốt.
EDIT Đó thực sự là ý tưởng của một lời giải thích từng bước về cách bạn sẽ chuyển đổi một mã R được viết tốt (và được ghi lại) (vì vậy ít nhất là nền tảng vẫn ổn) cho đến khi thực hiện hiệu quả. Việc lựa chọn mã có thể được tranh luận một chút ngẫu nhiên nhưng tôi nghĩ rằng nó phản ánh kịch bản điển hình vòm trên bản thiết kế của chúng tôi (gọi các hàm R mà người ta không muốn dịch, sử dụng các vòng lặp số học ....).
EDIT2 từ các bình luận tôi nhận ra đây thực sự có thể là một công việc lớn phải làm trong C ++ (tôi đã không nhận ra điều đó khi đăng mã). Về vấn đề này, sử dụng các mảnh riêng lẻ làm thiết bị sư phạm là ok. Cuối cùng tôi sẽ phân tích các phần lại với nhau bằng cách chỉnh sửa câu hỏi.