R语言算术运算符参数名失效:能否通过参数名指定运算数?
R语言内置二元运算符的参数名使用问题
观察发现,R语言的内置算术运算符(比如除法运算符/),查看其定义可见参数名为e1和e2,但使用参数名传参时会被忽略,仅按参数位置生效:
`/`(e1 = 1, e2 = 2) #[1] 0.5 `/`(e2 = 1, e1 = 2) # 此处预期结果应为2 #[1] 0.5
问题:是否只能通过参数位置来指定被除数与除数,还是存在使用参数名的可行方式?
而自定义二元运算符时,参数名不会被忽略,传参时按参数名生效:
`%div%` <- function(e1, e2) {e1 / e2} `%div%`(e1 = 1, e2 = 2) #[1] 0.5 `%div%`(e2 = 1, e1 = 2) #[1] 2
解答
这是因为R的内置二元运算符属于primitive函数(基础原语函数),这类函数底层由C实现,参数处理逻辑和R层面的自定义函数完全不同。它们不会解析传入的参数名,只会按参数位置来接收并处理操作数。
所以对于+、-、*、/这类内置二元运算符,确实只能通过参数位置指定操作数,无法用e1、e2这类参数名调换顺序。如果想要通过参数名控制操作数顺序,只能像示例那样自定义二元运算符,或者手动调整参数位置。
内容的提问来源于stack exchange,提问作者GKi
相关产品推荐
相关产品推荐

