2015-03-05 2 views

ответ

2

Да, вы можете использовать функцию R в пределах Rcpp.

library(inline) 

src <- ' 
    using namespace Rcpp; 
    Environment truncdist("package:truncdist"); 
    Function dtrunc = truncdist["dtrunc"]; 

    NumericVector res = dtrunc(x, "norm", 1, 2); 
    return res; 
' 
x <- seq(0, 3, .1) 

fun <- cxxfunction(signature(x="numeric"),src, plugin="Rcpp") 
identical(fun(x), dtrunc(x, spec="norm", a=1, b=2)) 

Как примечание, вы должны иметь в виду, что производительность dtrunc не улучшится, просто находясь внутри Rcpp. Это будет, по сути, такая же скорость, как если бы вы вызвали ее непосредственно в R.

+1

Даже медленнее, потому что 'Rcpp' завертывает его в свернутый вызов' tryCatch'. –

+0

Спасибо за ваш ответ и заметьте! Это очень полезно! – Crystal

4

Несомненно. Вы бы захватить функцию как это:

Environment truncdist("package:truncdist") ; 
Function dtrunc = truncdist["dtrunc"] ; 

Или даже это с версии 0.11.5

Function dtrunc("dtrunc", "truncdist") ; 
Смежные вопросы