%op%
denotes an infix binary operator. There are several built-in operators using %
, and you can also create your own.
(A single %
sign isn't a keyword in R. You can see a list of keywords on the ?Reserved
help page.)
How do I get help on binary operators?
As with anything that isn't a standard variable name, you have to to enclose the term in quotes or backquotes.
?"%in%"
?`%in%`
Credit: GSee's answer.
What does %in%
do?
As described on the ?`%in%`
help page (which is actually the ?match
help page since %in%
is really only an infix version of match
.),
[%in%
] returns a logical vector indicating if there is a match or not for its left operand
It is most commonly used with categorical variables, though it can be used with numbers as well.
c("a", "A") %in% letters
## [1] TRUE FALSE
1:4 %in% c(2, 3, 5, 7, 11)
## [1] FALSE TRUE TRUE FALSE
Credit: GSee's answer, Ari's answer, Sathish's answer.
How do I create my own infix binary operators?
These are functions, and can be defined in the same way as any other function, with a couple of restrictions.
- It's a binary opertor, so the function must take exactly two arguments.
- Since the name is non-standard, it must be written with quotes or backquotes.
For example, this defines a matrix power operator.
`%^%` <- function(x, y) matrixcalc::matrix.power(x, y)
matrix(1:4, 2) %^% 3
Credit: BondedDust's answer, Ari's answer.
What other %
operators are there?
In base R:
%/%
and %%
perform integer division and modular division respectively, and are described on the ?Arithmetic
help page.
%o%
gives the outer product of arrays.
%*%
performs matrix multiplication.
%x%
performs the Kronecker product of arrays.
In ggplot2:
%+%
replaces the data frame in a ggplot.
%+replace%
modifies theme elements in a ggplot.
%inside%
(internal) checks for values in a range.
%||%
(internal) provides a default value in case of NULL
values. This function also appears internally in devtools, reshape2, roxygen2 and knitr. (In knitr it is called %n%
.)
In magrittr:
%>%
pipes the left-hand side into an expression on the right-hand side.
%<>%
pipes the left-hand side into an expression on the right-hand side, and then assigns the result back into the left-hand side object.
%T>%
pipes the left-hand side into an expression on the right-hand side, which it uses only for its side effects, returning the left-hand side.
%,%
builds a functional sequence.
%$%
exposes columns of a data.frame or members of a list.
In data.table:
%between%
checks for values in a range.
%chin%
is like %in%
, optimised for character vectors.
%like%
checks for regular expression matches.
In Hmisc:
%nin%
returns the opposite of %in%
.
In devtools:
%:::%
(internal) gets a variable from a namespace passed as a string.
In sp:
%over%
performs a spatial join (e.g., which polygon corresponds to some points?)
In rebus:
%R%
concatenates elements of a regex
object.
More generally, you can find all the operators in all the packages installed on your machine using:
library(magrittr)
ip <- installed.packages() %>% rownames
(ops <- setNames(ip, ip) %>%
lapply(
function(pkg)
{
rdx_file <- system.file("R", paste0(pkg, ".rdx"), package = pkg)
if(file.exists(rdx_file))
{
rdx <- readRDS(rdx_file)
fn_names <- names(rdx$variables)
fn_names[grepl("^%", fn_names)]
}
}
) %>%
unlist
)