长变量名会降低r中的性能吗?

长变量名会降低r中的性能吗?,r,performance,variables,R,Performance,Variables,例如,如果在一个运行数百万次试验的函数中,以下两个函数将以不同的速度运行 the.name.of.a.random.variable.in.r <- some.value variable <- some.value a.random.variable.in.r的.name the.name.of.a.random.variable.in.r <- 1:1000 the.name.of.a.random.variable.in.r.aaaaaaaaaaaaaaaaaaaaa

例如,如果在一个运行数百万次试验的函数中,以下两个函数将以不同的速度运行

the.name.of.a.random.variable.in.r <- some.value

variable <- some.value

a.random.variable.in.r的.name

the.name.of.a.random.variable.in.r <- 1:1000
the.name.of.a.random.variable.in.r.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <- 1:1000

variable <- 1:1000

microbenchmark::microbenchmark(long=sum(the.name.of.a.random.variable.in.r), 
                               short=sum(variable), 
                               verylong=sum(the.name.of.a.random.variable.in.r.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa))

# Unit: nanoseconds
# expr     min  lq    mean median     uq   max neval cld
# long     970 987 1147.48 1036.5 1057.5 10468   100   a
# short    969 985 1038.82 1030.5 1053.5  1841   100   a
# verylong 968 988 1070.16 1036.0 1062.5  3961   100   a

a.random.variable.in.r的.name.rr解释器使用符号对象存储名称。代码语句被解析为表达式对象,这些对象是“语法正确的标记集合”,以引用定义(有关更多信息,请参阅和上的后续主题)。简而言之,冗长的变量名不直接使用,而是转换为符号对象,在解析表达式时使用该符号对象,随后可能会(也可能不会)对表达式求值。因此,变量名的长度与性能无关,因为R的解析器使用内部符号对象的标记,而不是符号的字符名,字符名只是符号的一个属性


R语言定义涵盖函数调用中的参数匹配,这是一个相当复杂的过程。简言之,在函数调用中匹配命名参数时使用符号查找,确定哪个符号对应哪个名称的性能成本不太可能妨碍整体性能。

在某些情况下,符号查找确实很重要,我相信,一个比我聪明得多的人可以设计出一个更可靠的实验测试。我会让这个问题“悬而未决”一个小时左右,看看是否有人知道它的重要性。