我想学习使用Rcpp。我浏览了该软件包的CRAN网站上的文档,但是我觉得编写一个实际示例(考虑到convolve3是第二个实际示例)会更有帮助。
我从robustbase软件包中提出了以下代码,因为它既不会太长也不会太短,它使用R类型和R函数的组合,并且具有那些在R中速度太慢的小型算术迭代之一。 -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))
}
请尽你所能。
编辑这实际上是逐步解释如何将编写良好(并有文档证明)的R代码(至少有基础的话)转换为有效实现的想法。代码的选择可以说是随机的,但我认为它反映了我们蓝图上的典型脚本(调用R函数,该函数不希望翻译,使用算术循环...。)。
从注释中看到EDIT2,我意识到这实际上可能是C ++中要做的一项大工作(发布代码时我没有意识到)。鉴于此,可以使用单个零件作为教学设备。我最终将通过编辑问题来将各个部分解析在一起。
3
我强烈不同意您编辑的标题和添加/编辑的问题。如果您认为Rcpp是代码编译器,或者在要求我们为您重写代码时,您会误会。
—
德克·埃德比布特
@Dirk:>当然,建议的标题是什么(较旧的标题?)。我不太在乎这个特定的功能,我有兴趣学习使我的代码运行更快的方法。如果您还有其他示例,请发布。我会很高兴地关闭这个。
—
user603 2010年