日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言观察日志(part18)--.C和.Call

發布時間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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參數的類型是:

RCFortran
integerint *integer
numericdouble *double precision
– or –float *real
complexRcomplex *double complex
logicalint *integer
characterchar **[see below]
rawunsigned char *not allowed
listSEXP *not allowed
otherSEXPnot 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。