.Call
似乎相當不成文; ?.Call
給出PACKAGE
參數的解釋:.Call的PACKAGE參數如何工作?
PACKAGE
:如果提供,限制爲一個字符串.NAME
由該參數(加上常規擴展給出的DLL搜索,「所以」,「的.dll」 ,...)。這一論點如下
...
,因此它的名字不能縮寫。這是爲了通過使用這種說法沒有其他包可以覆蓋其外部符號添加安全軟件包,它可以保證,同時也加快了搜索(見「註釋」)。
而在注:
如果這些功能之一是要經常使用,不要指定
PACKAGE
(以限制搜索到一個DLL)或通過.NAME
作爲本地標誌之一對象。搜索符號可能需要很長時間,尤其是在加載許多名稱空間時。對於鏈接到R中的符號,您可能會看到
PACKAGE = "base"
。不要在您自己的代碼中使用它:這些符號不是API的一部分,可能會在沒有警告的情況下進行更改。
PACKAGE = ""
用於被接受(但沒有記錄):現在是錯誤的。
但沒有使用的例子。
目前還不清楚PACKAGE
參數是如何工作的。例如,在回答問題this,我想下面應該有工作,但它並不:
.Call(C_BinCount, x, breaks, TRUE, TRUE, PACKAGE = "graphics")
而是這個作品:
.Call(graphics:::C_BinCount, x, breaks, TRUE, TRUE)
這僅僅是因爲C_BinCount
不導出?即,如果hist.default
的內部代碼已經添加了PACKAGE = "graphics"
,那麼這將工作嗎?
這看起來簡單,但真的是很難發現這種說法的使用;沒有的,我發現根源給予比順帶提(1,2,3,4,5)更多...實際工作,將不勝感激這樣的例子(即使它只是引用現有包中發現的代碼)
(自我遏制的目的,如果你不希望從另一個問題複製粘貼代碼,這裏有x
和breaks
):
x = runif(100000000, 2.5, 2.6)
nB <- 99
delt <- 3/nB
fuzz <- 1e-7 * c(-delt, rep.int(delt, nB))
breaks <- seq(0, 3, by = delt) + fuzz
不錯的問題,我只是GOOGLE了它,我發現了一些可以給你一些提示,如果沒有人有經驗http://www.biostat.jhsph.edu/~bcaffo/statcomp/files/dotCall.pdf – Learner
@學習者確實是我的問題鏈接3 – MichaelChirico
另請參見[此參考資料](https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-native-routines) –