С прошлой ночи я пробовал 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
.