本文我们介绍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