R语言观察日志(part18)--.C和.Call
學(xué)習(xí)筆記,僅供參考,有錯必糾
文章目錄
- .C(外來函數(shù)接口)
- 描述
- 用法
- 參數(shù)
- 細(xì)節(jié)
- 返回值
- 參數(shù)類型
- 注意
- .Call(C/C++代碼的接口)
- 描述
- 用法
- 參數(shù)
- 細(xì)節(jié)
- 返回值
.C(外來函數(shù)接口)
描述
函數(shù)調(diào)用已經(jīng)加載到R中的編譯代碼。
用法
.C(.NAME, ..., NAOK = FALSE, DUP = TRUE, PACKAGE, ENCODING) .Fortran(.NAME, ..., NAOK = FALSE, DUP = TRUE, PACKAGE, ENCODING)
參數(shù)
| .NAME | 一個(gè)字符串,給出C函數(shù)或Fortran子例程名稱,或類"NativeSymbolInfo"、“RegisteredNativeSymbol”,"NativeSymbol"的對象。 |
| … | 傳遞給外部函數(shù)的參數(shù) |
| NAOK | 如果為真,則參數(shù)中的任何NA、NaN或Inf值都被傳遞給外部函數(shù)。如果為假,NA、NaN或Inf值的存在被認(rèn)為是錯誤。 |
| PACKAGE | 如果提供,將搜索字符串.NAME限制在此參數(shù)指定的DLL中,這是為了增加包的安全性,通過使用這個(gè)參數(shù)可以確保沒有其他包可以覆蓋它們的外部符號,同時(shí)也加快了搜索速度 |
| DUP,ENCODING | 對于向后兼容性,接受但忽略。 |
細(xì)節(jié)
這些函數(shù)可以用來調(diào)用編譯后的C和Fortran代碼。后來的接口是.Call和.External,它們更加靈活,性能更好。
這些函數(shù)都是原始的,.NAME總是與提供的第一個(gè)參數(shù)相匹配
其他被命名的參數(shù)如下…所以不能縮寫。為了清晰起見,應(yīng)該避免在傳遞給…的實(shí)參中使用名稱,匹配或部分匹配.NAME。
返回值
類似于…傳入的參數(shù)列表(包括給參數(shù)的任何名稱),但反映C或Fortran代碼所做的任何更改。
參數(shù)類型
R參數(shù)的類型映射到C或Fortran參數(shù)的類型是:
| integer | int * | integer |
| numeric | double * | double precision |
| – or – | float * | real |
| complex | Rcomplex * | double complex |
| logical | int * | integer |
| character | char ** | [see below] |
| raw | unsigned char * | not allowed |
| list | SEXP * | not allowed |
| other | SEXP | not allowed |
注意
如果要經(jīng)常使用這些函數(shù)之一,一定要指定PACKAGE(將搜索限制在單個(gè)DLL中)或?qū)?NAME作為本機(jī)符號對象之一傳遞。
你可能會看到PACKAGE = "base"表示鏈接到R中的符號。
不要在你自己的代碼中使用這個(gè)符號:這些符號不是API的一部分,可能在沒有警告的情況下被改變。
.Call(C/C++代碼的接口)
描述
函數(shù)將R對象傳遞給已編譯的C/C++代碼,該代碼已加載到R中。
用法
.Call(.NAME, ..., PACKAGE) .External(.NAME, ..., PACKAGE)
參數(shù)
| .NAME | 一個(gè)字符串,它給出了一個(gè)C函數(shù)的名字,或者類"NativeSymbolInfo", “RegisteredNativeSymbol”,"NativeSymbol"的對象來指代這樣的名字。 |
| ... | 傳遞給編譯代碼的參數(shù) |
| PACKAGE | 如果提供,將搜索字符串.NAME限制在此參數(shù)指定的DLL中;這一參數(shù)引出…因此它的名字不能縮寫;這是為了增加包的安全性,通過使用這個(gè)參數(shù)可以確保沒有其他包可以覆蓋它們的外部符號,同時(shí)也加快了搜索速度。 |
細(xì)節(jié)
這些函數(shù)用于調(diào)用編譯后的代碼,這些代碼使用內(nèi)部R對象,并將參數(shù)作為R對象的序列傳遞給代碼。它們采用C調(diào)用約定,因此通常也可用于c++代碼。
返回值
在編譯后的代碼中構(gòu)造的R對象。
總結(jié)
以上是生活随笔為你收集整理的R语言观察日志(part18)--.C和.Call的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀里有猪八戒吗(如何玩好《王者荣耀
- 下一篇: R语言观察日志(part20)--包的组