函数“grDevices:::C_col2rgb”的源代码?

函数“grDevices:::C_col2rgb”的源代码?,r,graphics,rgl,R,Graphics,Rgl,如何找到函数grDevices::C_col2rgb的源C代码 在对一些RGL函数(即RGL:::RGL.quads和其中调用的函数)进行基准测试(使用R pkg provvis)之后,我被引导到了这个函数。包装C_col2rgb的相应R函数是来自grDevices的col2rgb。我有兴趣查看C_col2rgb的源代码,看看是否可以制作一个更快的版本 而且,一般来说,当您遇到R代码中使用的C函数时,是否有一种快速查找其源代码的方法 非常感谢 通常,当您想查看R函数的源代码时,只需在控制台中键入

如何找到函数
grDevices::C_col2rgb
的源C代码

在对一些RGL函数(即
RGL:::RGL.quads
和其中调用的函数)进行基准测试(使用R pkg provvis)之后,我被引导到了这个函数。包装
C_col2rgb
的相应R函数是来自grDevices的
col2rgb
。我有兴趣查看
C_col2rgb
的源代码,看看是否可以制作一个更快的版本

而且,一般来说,当您遇到R代码中使用的C函数时,是否有一种快速查找其源代码的方法

非常感谢


通常,当您想查看R函数的源代码时,只需在控制台中键入其名称并按enter键即可。然而,当该函数用另一种语言(如C)编写并暴露于R时,您最终将看到(类似于)

其中R调用编译后的代码。要查看这些函数的源代码,实际上必须查看包源代码。您正在谈论的功能在
grDevices
包中,它是通常称为“base R”的一部分(不一定与R包
base
混淆)——该包随所有R安装一起提供

GitHub上有一个R源代码镜像,如果我需要查看R的源代码,我喜欢参考它。
grDevices
包的代码位于

正如我在评论中提到的,您可以在中找到
C\u col2rgb()
的代码。但是,它看起来只是被称为
col2rgb()
。真的一样吗

。如果你咨询,你会发现

命名空间文件可以包含一个或多个useDynLib指令,这些指令允许加载需要加载的共享对象。。。。使用argument.fixes可以将自动前缀添加到已注册的符号中,这在处理现有包时非常有用。例如,包KernSmooth具有

useDynLib(kernstooth,.registration=TRUE,.fixes=“F_”)

这使得R变量对应于Fortran符号F_bkde等,从而避免与名称空间中的R代码冲突

我们可以看到


因此,从这个包中提供的C函数都将以
C_u
作为前缀,即使它们不在C源代码中。这使您可以调用R和C函数
col2rgb
,而不会引起任何问题。

签出(我最喜欢的R源代码镜像)。特别是,您需要感谢@duckmayr。但是我有点困惑,
col2rgb
是否与
C\u col2rgb
相同?是的。将添加一个完整的答案与解释在一瞬间太棒了!非常感谢。我还想提到Uwe Ligges在第43页上的文章,这篇文章是关于如何找到位置的一般性讨论。它有点老了,但仍然很相关。
.Call(C_col2rgb, col, alpha)
useDynLib(grDevices, .registration = TRUE, .fixes = "C_")