Помислете за това сравнение:
require(Rcpp)
require(microbenchmark)
cppFunction('int cppFun (int x) {return x;}')
RFun = function(x) x
x=as.integer(2)
microbenchmark(RFun=RFun(x),cppFun=cppFun(x),times=1e5)
Unit: nanoseconds
expr min lq mean median uq max neval cld
RFun 302 357 470.2047 449 513 110152 1e+06 a
cppFun 2330 2598 4045.0059 2729 2879 68752603 1e+06 b
cppFun
изглежда по-бавен от RFun
. Защо е така? Различават ли се времената за извикване на функциите? Или самата функция се различава по време на работа? Време ли е за предаване и връщане на аргументи? Има ли преобразуване на данни или копиране на данни, за които не знам, когато данните се предават на (или се връщат от) cppFun
?
cppFun
, се изписва.Primitive(".Call")(<pointer: 0x1153d4cd0>, x)
. Защо извикването на такава функция отнема повече време? - person Remi.b   schedule 29.09.2016