小编nru*_*ell的帖子

runif的表现

我正在为特定问题开发自定义引导算法,因为我想要大量的重复,我确实关心性能.在这方面,我对如何正确使用runif有一些疑问.我知道我自己可以运行基准测试,但C++优化往往很难,我也想了解任何差异的原因.

第一个问题:

第一个代码块是否比第二个更快?

for (int i = 0; i < n_boot; i++) {
  new_random = runif(n);  //new_random is pre-allocated in class
  // do something with the random numbers
}
Run Code Online (Sandbox Code Playgroud)
for (int i = 0; i < n_boot; i++) {
  NumericVector new_random = runif(n);
  // do something with the random numbers
}
Run Code Online (Sandbox Code Playgroud)

它可能归结为runif是填充左侧还是分配并传递新的NumericVector.

第二个问题:

如果两个版本都分配了一个新的向量,我可以通过在标量模式下一次生成一个随机数来改进吗?

如果您想知道,内存分配占用了我处理时间的相当大一部分.通过优化其他不必要的内存分配,我将运行时间减少了30%,因此它很重要.

c++ memory r rcpp

3
推荐指数
1
解决办法
836
查看次数

基于多行值计算新列

我有一个data.frame看起来像这样:

Name  Age Gender Team  
John  18    M     A 
Luke  75    M     B  
Dean  20    M     C  
Zoe   34    F     B  
Chloe 12    F     B  
Erik  56    M     A  
Run Code Online (Sandbox Code Playgroud)

我想计算一个新的值(TeamType)对于团队的所有成员都是一样的,但取决于团队中的人.
例如,团队B M和团队中的两个F团队都将拥有,TeamType=Mixed而团队C和A将是OnlyM,如下所示:

Name  Age Gender Team TeamType
John  18    M     A    OnlyM
Luke  75    M     B    Mixed  
Dean  20    M     C    OnlyM
Zoe   34    F     B    Mixed
Chloe 12    F     B    Mixed
Erik  56    M     A    OnlyM
Run Code Online (Sandbox Code Playgroud)

这在Python或许多其他传统语言中很容易做到,但我无法弄清楚如何在R中做到这一点.

r dataframe

3
推荐指数
2
解决办法
84
查看次数

R read.csv"比列名更多的列"错误

.csv文件导入R 时出现问题.我的代码:

t <- read.csv("C:\\N0_07312014.CSV", na.string=c("","null","NaN","X"),
          header=T, stringsAsFactors=FALSE,check.names=F)
Run Code Online (Sandbox Code Playgroud)

R报告错误并且不按我的意愿执行操作:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names
Run Code Online (Sandbox Code Playgroud)

我想问题是因为我的数据格式不正确.我只需要来自的数据[,1:32].应删除所有其他人.

可从以下网址下载数据:https: //drive.google.com/file/d/0B86_a8ltyoL3VXJYM3NVdmNPMUU/edit?usp =sharing

非常感谢!

import r

2
推荐指数
3
解决办法
7万
查看次数

Abline不会出现在R中

我在R中运行回归,当试图适应abline绘图时没有任何反应,没有出现错误信息.

我必须记录转换数据,所以我想知道这是否是问题?数据不是正常分布的,但我们仍然被要求执行回归.

这是我到目前为止所尝试的:

alldata<-read.csv(file.choose(),header=T)

attach(alldata)

plot(weight.g,wingspan.mm,log="xy")

abline(lm(wingspan.mm~weight.g))

fit1<-lm(wingspan.mm~weight.g)

> summary(fit1)

fit2<-lm(log(wingspan.mm)~log(weight.g))

plot(fit2)

plot(weight.g,wingspan.mm,log="xy")

abline(fit2)

abline(lm(log(wingspan.mm)~log(weight.g)))
Run Code Online (Sandbox Code Playgroud)

谁能发现我哪里错了?

谢谢,凯特

regression r

2
推荐指数
1
解决办法
3300
查看次数

R中的求和函数

我想计算一个简单的总和,但不是从1到我在sum函数中放入的值,而是我希望它总结,就像我通常在数学中所做的那样,我有一个表达式有一些变量,我然后从1:4改变,然后R假设将表达式值相加.

喜欢

y = function(x) x**2

sum(y(x),x=3:5) = 3^2+4^2+5^2
Run Code Online (Sandbox Code Playgroud)

我如何在R中执行此操作?

r

2
推荐指数
1
解决办法
2935
查看次数

列表示3d矩阵(立方体)Rcpp

我有一个程序,我需要X(nRow, nCol, nSlice)在Rcpp中重复计算每个立方体切片的列平均值,结果意味着形成一个矩阵M(nCol, nSlice).以下代码产生错误:

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp; 
using namespace arma;

// [[Rcpp::export]]

mat cubeMeans(arma::cube X){
   int nSlice = X.n_slices;
   int nCol = X.n_cols;
   int nRow = X.n_rows;
   arma::vec Vtmp(nCol);
   arma::mat Mtmp(nRow, nCol);
   arma::mat Means(nCol, nSlice);
   for (int i = 0; i < nSlice; i++){
      Mtmp = X.slice(i);
      for(int j = 0; j < nCol; j++){
         Vtmp(j) = sum(Mtmp.col(j))/nRow; 
      }
      Means.col(i) = Vtmp;
   }
  return(wrap(Means));
}
Run Code Online (Sandbox Code Playgroud)

'/Rcpp/internal/Exporter.h:31:31:错误:没有匹配函数来调用'arma :: Cube :: Cube(SEXPREC*&)'

我无法弄明白.当函数的输入是一个矩阵(并返回一个向量)时,我没有得到错误.但是,我将上述功能作为主程序的一部分包括在内

#include …
Run Code Online (Sandbox Code Playgroud)

r matrix armadillo rcpp

2
推荐指数
1
解决办法
1443
查看次数

fastLm()比lm()慢得多

fastLm()比...慢得多lm().基本上,我只是打电话lm()fastLm()使用相同的公式和数据,但fastLm()似乎要慢得多lm().这可能吗?我只是不知道这怎么可能发生?

dim(dat)
#[1] 87462    90
##
library(Rcpp)
library(RcppEigen)
library(rbenchmark)

benchmark(fastLm(formula(mez),data=dat),lm(formula(mez),data=dat))
                              test replications elapsed relative user.self  sys.self user.child sys.child
1 fastLm(formula(mez), data = dat)          100  195.81    7.079    189.36     6.27         NA        NA
2     lm(formula(mez), data = dat)          100   27.66    1.000     24.52     3.02         NA        NA

summary(mez)

Call: lm(formula = totalActualVal ~ township + I(TotalFinishedSF^2) + 
    mainfloorSF + nbrFullBaths + township + range + qualityCodeDscr + 
    TotalFinishedSF:range + nbrBedRoom + PCT_HISP, data = …
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

在arma :: mat中查找唯一的行

在R中,我们可以使用唯一方法来查找唯一行

> data <- matrix(c(1,1,0,1,1,1,0,1),ncol = 2)
> data
     [,1] [,2]
[1,]    1    1
[2,]    1    1
[3,]    0    0
[4,]    1    1

> unique(data)
     [,1] [,2]
[1,]    1    1
[2,]    0    0
Run Code Online (Sandbox Code Playgroud)

我们怎样才能arma::mat在Rcpp中做到这一点?这里唯一函数返回唯一元素而不是唯一行.

r unique armadillo rcpp

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

Rcpp - 如何在 C++ 代码中使用分布函数

我正在为 N(0,1) 分布编写 Metropolis-Hastings 算法:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector metropolis(int R, double b, double x0){
    NumericVector y(R);
    y(1) = x0;
    for(int i=1; i<R; ++i){
       y(i) = y(i-1);
       double xs = y(i)+runif(1, -b,b)[0];
       double a = dnorm(xs, 0, 1)[0]/dnorm(y(i), 0, 1)[0];
       NumericVector A(2);
       A(0) = 1;
       A(1) = a;
       double random = runif(1)[0];
       if(random <= min(A)){
            y[i] = xs;
       }
   }
   return y;
}
Run Code Online (Sandbox Code Playgroud)

但每次我尝试编译该函数时,都会出现此错误:

第 12 行:没有匹配的函数来调用“dnorm4”

我尝试使用 dnorm 编写一个简单的函数,例如

NumericVector den(NumericVector y, double a, double …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp

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

用r中的seq加速嵌套for循环

我想用二进制值创建一个新列(df_one $ acceslane).if df_one$direction == df_two$direction和if df_one$locationdf_two$location几乎相同( - >参见嵌套for循环中的Distance)它应该是1.

df_one:

direction | location | acceslane    
L | 12.3 | NA
R | 14.8 | NA
Run Code Online (Sandbox Code Playgroud)

df_two:

direction | location
L | 12.5 
R | 145.0

for (i in 1:nrow(df_one)) {
  for (j in 1:nrow(df_two)) {
    Distance <- seq(df_two[j, 2]-.5, df_two[j, 2]+.5, by = .1)
    if ((x[i, 1] == df_two[j, 1]) & (x[i, 2] %in% Distance)){
      df_one[i, 3] <- 1
      break}
    else{df_one[i, 3] <- 0} …
Run Code Online (Sandbox Code Playgroud)

performance for-loop r

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

标签 统计

r ×10

rcpp ×5

armadillo ×2

c++ ×2

dataframe ×1

for-loop ×1

import ×1

matrix ×1

memory ×1

performance ×1

regression ×1

unique ×1