当前位置:天才代写 > tutorial > 其他教程 > [无所不包的R]当场编译调试C/C++源代码的inline包

[无所不包的R]当场编译调试C/C++源代码的inline包

2017-12-04 08:00 星期一 所属: 其他教程 浏览:505

写代码真累,写几行文字吧,记录一下最近在用inline包。


它是我用过最简洁的包,只有两个函数:cfunction和cxxfunction,成果雷同,只是一个针对C,一个针对C++。


以cxxfunction为例,以下的例子在library(inline)后可以直接在R事情区执行:

fx <- cxxfunction( signature(x = “integer”, y = “numeric” ) , ‘return ScalarReal( INTEGER(x)[0] * REAL(y)[0] ) ;’ )
fx( 2L, 5 )

第一行会就地编译生成一个C++函数,并交由R函数链接挪用。第二行就可以看到实际挪用的功效。由于第一行是真的干了编译链接的事,所以执行起来会稍慢。

表明一下,一般给R写C/C++接口都要有相应的源文件,把源文件编译成so共享库之后,再通过R的.Call函数挪用。这里相当于把这些步调合起来一次到位了,合用于做一些姑且的代码片断的调试,可能是跟RUnit一起做C/C++函数的单位测试。

因为是返回一个函数,所以第一个参数指示该函数的传入参数的范例,第二个参数就是C/C++的代码片断了。

很简朴吧,就实现了R与C/C++的接口。但这个包更多长短出产情况下的利用,好比Rcpp包的单位测试就有大量的利用了,一个例子如下:

if( require( Rcpp ) ){
fx <- cxxfunction( signature(x = “integer”, y = “numeric” ) , ‘return wrap( as<int>(x) * as<double>(y) ) ;’, plugin = “Rcpp” )
fx( 2L, 5 )
}
这里的plugin参数就可以把某个包作为插件利用,富厚了C/C++代码的成果。
 

    关键字:

天才代写-代写联系方式