J. *_*ini 5 performance r switch-statement
在大多数带有switch语句的语言中,它switch是一种特殊的形式,旨在延迟评估可能性,并且编译器知道如何根据给定的输入优化语句的选择。R,大多已经很懒了,不需要其中的一些。然而,R 的switch语句仍然是一个函数调用,而不是任何一种特殊的形式。这是否意味着 R 的switch语句比它是一种特殊形式时要慢?或者 R 的解释器是否知道优化它,好像它是一种特殊形式?
如果您查看switch文件src/main/builtin.c中的内部代码,您可以阅读第 1009-1025 行:
这是一个 SPECIALSXP,因此需要根据需要评估参数。
SPECIALSXP 意思是:
no SEXPTYPE Description
7 SPECIALSXP special functions
Run Code Online (Sandbox Code Playgroud)
Soswitch实际上是一个特殊的函数,它将未计算的参数传递给内部函数。
进一步阅读从第 1030 行到第 1104 行的源代码表明,如 中所述?switch,该函数要么处理character要么number以简单且未完全优化的方式处理。
这可能解释了为什么switch在例如需要二进制搜索的情况下不是特别快。