小编Jin*_*tar的帖子

浮点错误 fligner.test r 函数?

我注意到,使用fligner.testrstats包中的统计测试通过简单的转换提供了不同的结果,即使情况不应该如此。

这是一个例子(原始数据集的差异更加显着):

g  <- factor(rep(1:2, each=6))
x1 <- c(2,2,6,6,1,4,5,3,5,6,5,5)
x2 <- (x1-1)/5 #> cor(x1,x2) [1] 1
fligner.test(x1,g) # chi-squared = 4.2794, df = 1, p-value = 0.03858
fligner.test(x2,g) # chi-squared = 4.8148, df = 1, p-value = 0.02822
Run Code Online (Sandbox Code Playgroud)

查看函数代码,我注意到中位数居中可能导致问题:

x1 <- x1 - tapply(x1,g,median)[g]
x2 <- x2 - tapply(x2,g,median)[g]
unique(abs(x1)) # 1 3 2 0
unique(abs(x2)) # 0.2 0.6 0.4 0.2 0.0 <- repeated 0.2
Run Code Online (Sandbox Code Playgroud)

这是一个已知问题吗?应如何解决这种不一致?

floating-point precision r floating-accuracy

6
推荐指数
1
解决办法
67
查看次数

Rcpp - 加速 for 和 while 循环内的随机正常绘制

我是 Rcpp 的新手,正在探索它的应用程序。特别是,我正在尝试加速以下功能,部分基于之前的答案

code = 'NumericVector RcppFun(int N){
            NumericVector out(N);
            for (int i = 0; i < N; ++i) {
                double V = 0;
                while( V > -1e04 && V < 1e04 ) {
                    V += R::rnorm(10, 100);
                    }
                out[i] = V;
                }
            return out;
            }'
cppFunction(code)
system.time(RcppFun(1e05))
Run Code Online (Sandbox Code Playgroud)

该代码比 R 对应的代码快得多,但在我的计算机上运行仍需要几秒钟。鉴于我需要多次调用这个函数,我想知道是否可以进一步提高它的性能。

我在想修改 while 循环内的逻辑语句或更改 RNG 函数会以某种方式使函数更快,但我不知道如何实现。

谢谢您的任何建议!

编辑:为了完整性,这里是我根据 Dirk 非常有用的建议用 C++ 编写的代码:

#include <Rcpp.h>
// [[Rcpp::depends(RcppZiggurat)]]
#include <Ziggurat.h>
using namespace Rcpp;
static Ziggurat::Ziggurat::Ziggurat zigg;
// [[Rcpp::export]]
NumericVector …
Run Code Online (Sandbox Code Playgroud)

random r while-loop rcpp

4
推荐指数
1
解决办法
1128
查看次数