R语言中函数参数名末尾带单个点有什么特殊含义?
问题
部分常见R函数的参数名末尾带有单个点。例如,使用?warning查看warning()函数的文档时,其用法部分显示:
warning(..., call. = TRUE, immediate. = FALSE, noBreaks. = FALSE, domain = NULL)
除了domain外,所有具名参数的名称末尾都带有点。
同样,stats库中的默认prcomp()函数用法说明如下:
prcomp(x, retx = TRUE, center = TRUE, scale. = FALSE, tol = NULL, rank. = NULL, ...)
其中scale.和rank.参数末尾带点,其余则没有,这种scale.带点而center不带点的情况尤为奇怪。
我知道R语言允许变量名中使用点,甚至可以命名像this.variable.name.is.full.of.dots.这样的变量,但这类函数参数名末尾带点的情况在常见R函数中反复出现,这是否存在特殊含义?
回答
这种参数名末尾加单点的做法,本质是避免和R的内置关键字、已有函数/变量名冲突,算是早期R开发里的一种命名约定,没有语法层面的特殊含义:
- 最典型的例子是
call.:因为R里有内置函数call(),如果参数名叫call,就会和这个内置函数重名,加个点就能区分开,避免混淆。 - 像
scale.的情况:R里刚好有scale()函数,而center没有对应的同名内置函数,所以前者需要加点避重,后者不用——这就是你看到两者差异的原因。 - 还有
immediate.、noBreaks.这类参数,加点更多是早期开发者的习惯:既能和可能存在的同名变量/函数划清界限,也能让参数名和普通变量名区分开,看起来更清晰。
简单来说,加点要么是为了避重,要么是早期遗留的命名风格,R解释器不会因为末尾的点对参数做任何特殊处理。
内容的提问来源于stack exchange,提问作者bluemouse
相关产品推荐
相关产品推荐

