.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) –