相关疑难解决方法(0)

表格的Rcpp版本较慢; 这是从哪里来的,如何理解

在为已经聚合的数据创建一些采样函数的过程中,我发现表格在我正在使用的大小数据上相当慢.我尝试了两个改进,首先是Rcpp函数,如下所示

// [[Rcpp::export]]
IntegerVector getcts(NumericVector x, int m) {
  IntegerVector cts(m);
  int t;
  for (int i = 0; i < x.length(); i++) {
    t = x[i] - 1;
    if (0 <= t && t < m)
      cts[t]++;
  }
  return cts;
}
Run Code Online (Sandbox Code Playgroud)

然后在试图理解为什么表格相当慢的时候,我发现它基于制表.Tabulate对我来说效果很好,并且比Rcpp版本更快.制表的代码位于:

https://github.com/wch/r-source/blob/545d365bd0485e5f0913a7d609c2c21d1f43145a/src/main/util.c#L2204

关键是:

for(R_xlen_t i = 0 ; i < n ; i++)
  if (x[i] != NA_INTEGER && x[i] > 0 && x[i] <= nb) y[x[i] - 1]++;
Run Code Online (Sandbox Code Playgroud)

现在制表和我的Rcpp版本的关键部分看起来非常接近(我没有打扰过NA).

Q1:为什么我的Rcpp版本慢了3倍?

Q2:我怎样才能知道这个时间到了哪里?

我非常感谢知道时间的去向,但更好的方法是分析代码.我的C++技能只是如此,但这似乎很简单,我应该(交叉我的手指)能够避免任何会使我的时间增加三倍的愚蠢的东西.

我的时间码:

max_x <- 100
xs <- sample(seq(max_x), …
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

用R中的条件按组计算均值

我有这个数据...

   Scientificname               Level Zone  levelmean
   <chr>                        <int> <chr>     <dbl>
 1 Acanthostracion polygonius       3 B         0.135
 2 Acanthostracion quadricornis     1 B         0.286
 3 Acanthostracion quadricornis     1 D         0.228
 4 Acanthostracion quadricornis     2 B         0.212
 5 Acanthostracion quadricornis     2 D         0.181
 6 Acanthostracion quadricornis     3 B         0.247
 7 Acanthostracion quadricornis     3 D         0.222
 8 Acanthostracion quadricornis     4 B         0.151
 9 Acanthostracion quadricornis     4 D         0.202
10 Acanthostracion spp.             2 B         0.225
11 Achirus lineatus                 1 B         0.204
12 Achirus lineatus                 1 D …
Run Code Online (Sandbox Code Playgroud)

grouping r data-manipulation dataframe

4
推荐指数
3
解决办法
100
查看次数

标签 统计

r ×2

data-manipulation ×1

dataframe ×1

grouping ×1

rcpp ×1