Найти минимум вектора в Rcpp

С прошлой ночи я пробовал Rcpp и inline , и пока мне это очень нравится. Но я новичок в C в целом и пока могу делать только базовые вещи, и мне трудно найти в Интернете помощь по таким вещам, как функции.

Я работал над одной функцией, которая находит минимум вектора в глобальной среде. Я придумал:

library("inline")
library("Rcpp")

foo <- rnorm(100)

bar <- cxxfunction( signature(),
'
Environment e = Environment::global_env();  
NumericVector foo = e["foo"];
int min;

for (int i = 0; i < foo.size(); i++)
{
    if ( foo[i] < foo[min] ) min = i;
}
return wrap(min+1);
', plugin = "Rcpp")

bar()

Но похоже, что должен быть более простой способ сделать это, и он намного медленнее, чем which.max ()

system.time(replicate(100000,bar()))
   user  system elapsed 
   0.27    0.00    0.26 
system.time(replicate(100000,which.min(foo)))
   user  system elapsed 
    0.2     0.0     0.2 

Я не упускаю из виду базовый c ++ или Rcpp , которая это делает? И если да, то где мне найти список таких функций?

Думаю, этот вопрос связан с:

library("inline")
library("Rcpp")

foo <- rnorm(100)

bar <- cxxfunction( signature(),
'
Environment e = Environment::global_env();  
NumericVector foo = e["foo"];
int min;

for (int i = 0; i < foo.size(); i++)
{
    if ( foo[i] < foo[min] ) min = i;
}
return wrap(min+1);
', plugin = "Rcpp")

bar()

Но похоже, что должен быть более простой способ сделать это, и он намного медленнее, чем which.max ()

system.time(replicate(100000,bar()))
   user  system elapsed 
   0.27    0.00    0.26 
system.time(replicate(100000,which.min(foo)))
   user  system elapsed 
    0.2     0.0     0.2 

Я не замечаю базовый c ++ или Функция rcpp , которая это делает? И если да, то где мне найти список таких функций?

Думаю, этот вопрос связан с:

library("inline")
library("Rcpp")

foo <- rnorm(100)

bar <- cxxfunction( signature(),
'
Environment e = Environment::global_env();  
NumericVector foo = e["foo"];
int min;

for (int i = 0; i < foo.size(); i++)
{
    if ( foo[i] < foo[min] ) min = i;
}
return wrap(min+1);
', plugin = "Rcpp")

bar()

Но похоже, что должен быть более простой способ сделать это, и он намного медленнее, чем which.max ()

system.time(replicate(100000,bar()))
   user  system elapsed 
   0.27    0.00    0.26 
system.time(replicate(100000,which.min(foo)))
   user  system elapsed 
    0.2     0.0     0.2 

Я упускаю из виду базовый c ++ или Функция rcpp , которая это делает? И если да, то где мне найти список таких функций?

Думаю, этот вопрос связан с: Где я могу научиться писать код на C для ускорения медленных функций R?

но отличается тем, что меня не особо интересует, как включить c ++ в R , но подробнее о том, как и где изучить базовый код c ++ , который можно использовать в R .

7
задан Community 23 May 2017 в 12:08
поделиться