R的switch语句不是一种特殊形式,因此它很慢吗?

标签 r performance switch-statement

在大多数使用switch语句的语言中,switch是一种特殊的形式,可以对延迟进行评估,并且编译器知道如何根据给定的输入来优化语句的选择。 R,大多数已经是懒惰的,不需要其中的一些。但是,R的switch语句仍然是函数调用,而不是任何特殊形式。这是否意味着R的switch语句比特殊形式的语句慢?还是R的解释器会像优化特殊形式一样知道对其进行优化?

最佳答案

如果您在文件src/main/builtin.c中查看switch的内部代码,则可以在第1009-1025行中阅读:

This is a SPECIALSXP, so arguments need to be evaluated as needed.

SPECIALSXP means:
no  SEXPTYPE    Description
7   SPECIALSXP  special functions
因此,switch实际上是一个special function,它将未经评估的参数传递给内部函数。
从源代码行1030到行1104的进一步读取显示,如?switch中所述,该函数以简单且未完全优化的方式处理characternumber
这可能可以解释为什么switch在需要例如二进制搜索的情况下不是特别快。

关于R的switch语句不是一种特殊形式,因此它很慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65885943/

相关文章:

android-studio - 切换时如何在 Kotlins 中使用多行?

r - 在 rCharts 中向传单 map 添加文本

Mysql连接查询优化

java - 如何在开关盒中使用范围

c# - 使用 LINQ to SQL 从数据库进行最佳 Count() 操作

android - 检查设备是否真的在移动

c++ While循环终止与功能

r - 聚合/总结每组多个变量(例如总和、平均值)

c++ - sugar all() 行的 Rcpp 错误

删除 ggplot 中的图例标题