Skip to main content
 首页 » 编程设计

R语言中缀操作符教程

2022年07月19日140落叶

本文我们介绍R中缀操作符,包括如何使用以及自定义中缀操作符。

R大多数操作符属于二元操作符,因此属于中缀操作符,操作符在两个操作数之间。实际上底层是函数调用。

举例,a+b 表达式调用+()函数,其参数为a,b , 即 +(a,b)。注意+上的重音符号表示函数名称包含特殊符号。

R 中缀符号对应函数

下面代码展示常规操作,分别使用中缀操作符以及对应函数方式。

5+3 
# [1] 8 
`+`(5,3) 
# [1] 8 
 
5-3 
# [1] 2 
`-`(5,3) 
# [1] 2 
 
5*3-1 
# [1] 14 
`-`(`*`(5,3),1) 
# [1] 14 
 

自定义中缀符号

在R中可以自定义中缀操作符,其函数名需要是使用%包裹。下面通过示例来说明。

使用该函数可以才有中缀符号,也可以使用函数调用:

`%divisible%` <- function(x,y){ 
  if (x%%y ==0) return (TRUE) 
  else          return (FALSE) 
} 
 
10 %divisible% 3 
# [1] FALSE 
10 %divisible% 2 
# [1] TRUE 
`%divisible%`(10,5) 
# [1] TRUE 

需要提醒的是自定义中缀符号需要以%开头和结尾,并使用重音符号`包裹以转义特殊符号。

常用的中缀符号

符号 说明 备注
%% 取余数
%/% 整除
%*% 矩阵乘积
%o% 矩阵外积
%x% 克罗内克积
%in% 匹配操作
%^% 矩阵指数 引用包 library(expm)

lubridate 包的中缀符号应用

下面示例计算不同组的平均运行时间(以周为单位)。

首先定义开始时间和结束时间,然后利用%--%符号计算两者时间间隔:

library(lubridate) 
 
start <- c("2012-08-21", "2012-09-01", "2012-08-15", "2012-09-18") 
end <- c("2012-09-16", "2012-09-06", "2012-08-22", "2012-10-11") 
elapsed.time <- start %--% end 
elapsed.time  

elapsed.time 返回的是Interval类型,表示时间间隔或范围,我们可以使用as.duration 函数转换为以秒为单位的时间,然后再以周为单位表示为人易读的方式:

options(digits = 1) 
 
as.duration(elapsed.time) / dweeks(1) 
# [1] 3.7 0.7 1.0 3.3 
 
as.duration(elapsed.time) / dhours(1) 
## [1] 624 120 168 552 
 
as.duration(elapsed.time) / ddays(1) 
## [1] 26  5  7 23 
 
as.duration(elapsed.time) / dminutes(1) 
## [1] 37440  7200 10080 33120 
 
as.duration(elapsed.time) / dyears(1) 
## [1] 0.07 0.01 0.02 0.06 

本文参考链接:https://blog.csdn.net/neweastsun/article/details/122093043
阅读延展