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