knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" ) library(inops)
Package implementing additional infix operators for R.
Implemented operators work with 4 different value types: sets, intervals, regular expressions, and counts.\ And provide 3 distinct functionalities: detection, subsetting, and replacement.
Install using the remotes
package:
remotes::install_github("moodymudskipper/inops")
All operators have the same form composed of two distinct parts: %<operation><type>%
.
[operation]
specifies the performed functionality and can be one of in
, out
, [in
, [out
.[type]
specifies the type of operation and can be one of {}
, []
, ()
, [)
, (]
, ~
, ~p
, ~f
, #
.%in{}% %out{}%
Work with the same values as %in%
does but provide a more consistent behaviour for data.frames
and NA
values.
letters <- letters[1:10] letters # sets letters %in{}% c("a", "b", "c", "e") letters %out{}% c("a", "b", "c", "e")
%in()% %in[]% %in[)% %in(]% %out()% %out[]% %out[)% %out(]%
1:10 # closed interval 1:10 %in()% c(3,6) 1:10 %out()% c(3,6) # open interval 1:10 %in[]% c(3,6) 1:10 %out[]% c(3,6) # open on the right 1:10 %in(]% c(3,6) 1:10 %out(]% c(3,6) # open on the left 1:10 %in[)% c(3,6) 1:10 %out[)% c(3,6)
%in~% %in~f% %in~p% %out~% %out~f% %out~p%
month.name # regular expressions month.name %in~% "^M.*" month.name %out~% "^M.*" # fixed string regular expressions month.name %in~f% "^M.*" month.name %out~f% "^M.*" # perl regular expressions month.name %in~p% "^(?=.*r)(?!.*er)" month.name %out~p% "^(?=.*r)(?!.*er)"
%in#% %out#%
values <- c("a", "a", "b", "b", "b", "c") values # number of occurances values %in#% 1:2 values %out#% 1:2
Same form as examples shown above.
month.name month.name %in~% c("^A", "^M")
Used for obtaining actual values.\
Starts with [
.
month.name month.name %[in~% c("^A", "^M")
Used for replacing the matched elements with new values.\
Called with assignment <-
at the end.
month.name month.name %in~% c("^A", "^M") <- "A or M" month.name
The operators implemented here try to be consistent with the default comparison operators like ==
and <
.\
Therefore in some scenarios their behaviour differs from %in%
.\
For instance:
1) %in{}%
can be used on on data frames.
df1 <- data.frame(a = 1:3, b = 2:4, c=letters[1:3]) df1 == 2 df1 %in% 2 df1 %in{}% 2 df1 %in{}% 2:3
2) missing values are not considered as not matching.
NA == 1 NA %in% 1 NA %in{}% 1 NA %in% NA NA %in{}% NA c(1, NA, 3) %in{}% 1:10
Simple examples for illustration.
Selecting flight records from the flights
dataset that:
library(nycflights13) library(dplyr) library(inops) flights <- select(flights, origin, dest, tailnum, dep_time, arr_time, distance) flights filter(flights, dep_time %in()% c(1200, 1700), arr_time %in()% c(1200, 1700), dest %out% c("LEX", "PSP", "HDN"), distance %out[]% c(100, 3000), tailnum %in~% c("^N1", "^N3") )
Cleaning up planes
dataset in order to:
library(nycflights13) library(inops) table(planes$manufacturer %[in~% c("AIRBUS", "CANADAIR", "MCDONNELL")) planes$manufacturer %in~% "AIRBUS" <- "AIRBUS" planes$manufacturer %in~% "CANADAIR" <- "CANADAIR" planes$manufacturer %in~% "MCDONNELL" <- "MCDONNELL" table(planes$manufacturer %[in~% c("AIRBUS", "CANADAIR", "MCDONNELL"))
Combine engine models that in the dataset occur less than 6 times under the "Other" group.
library(nycflights13) library(inops) table(planes$engine) planes$engine %in#% 1:5 <- "Other" table(planes$engine)
Below is a full list of all the implemented operators along with their usage examples.
| Form | Description | Call |
|-------------|--------------------------------------------------------------------------|-------------------------------|
| %in{}%
| which elements are inside a set | x %in{}% set
|
| %in[]%
| which elements are inside a closed interval | x %in[]% interval
|
| %in()%
| which elements are inside an open interval | x %in()% interval
|
| %in[)%
| which elements are inside an interval open on the right | x %in[)% interval
|
| %in(]%
| which elements are inside an interval open on the left | x %in(]% interval
|
| %in~%
| which elements match a regular expression | x %in~% pattern
|
| %in~p%
| which elements match a regular perl expression | x %in~p% pattern
|
| %in~f%
| which elements match a regular fixed expression | x %in~f% pattern
|
| %in#%
| which elements occur a specified number of times | x %in#% count
|
| %out%
| which elements are outside a set (same as ! x %in% y) | x %out% set
|
| %out{}%
| which elements are outside a set | x %out{}% set
|
| %out[]%
| which elements are outside a closed interval | x %out[]% interval
|
| %out()%
| which elements are outside an open interval | x %out()% interval
|
| %out[)%
| which elements are outside an interval open on the right | x %out[)% interval
|
| %out(]%
| which elements are outside an interval open on the left | x %out(]% interval
|
| %out~%
| which elements do not match a regular expression | x %out~% pattern
|
| %out~p%
| which elements do not match a regular perl expression | x %out~p% pattern
|
| %out~f%
| which elements do not match a regular fixed expression | x %out~f% pattern
|
| %out#%
| which elements occur other than a specified number of times | x %out#% count
|
| Form | Description | Call |
|-------------|--------------------------------------------------------------------------|-------------------------------|
| %[in%
| select elements inside a set | x %[in% set
|
| %[in{}%
| select elements inside a set | x %[in{}% set
|
| %[in[]%
| select elements inside a closed interval | x %[in[]% interval
|
| %[in()%
| select elements inside an open interval | x %[in()% interval
|
| %[in[)%
| select elements inside an interval open on the right | x %[in[)% interval
|
| %[in(]%
| select elements inside an interval open on the left | x %[in(]% interval
|
| %[in~%
| select elements matching a regular expression | x %[in~% pattern
|
| %[in~p%
| select elements matching a regular perl expression | x %[in~p% pattern
|
| %[in~f%
| select elements matching a regular fixed expression | x %[in~f% pattern
|
| %[in#%
| select elements that occur a specified number of times | x %[in#% count
|
| %[out%
| select elements outside a set | x %[out% set
|
| %[out{}%
| select elements outside a set | x %[out{}% set
|
| %[out[]%
| select elements outside a closed interval | x %[out[]% interval
|
| %[out()%
| select elements outside an open interval | x %[out()% interval
|
| %[out[)%
| select elements outside an interval open on the right | x %[out[)% interval
|
| %[out(]%
| select elements outside an interval open on the left | x %[out(]% interval
|
| %[out~%
| select elements not matching a regular expression | x %[out~% pattern
|
| %[out~p%
| select elements not matching a regular perl expression | x %[out~p% pattern
|
| %[out~f%
| select elements not matching a regular fixed expression | x %[out~f% pattern
|
| %[out#%
| select elements that occur other than specified number of times | x %[out% count
|
| Form | Description | Call |
|-------------|--------------------------------------------------------------------------|-------------------------------|
| ==<-
| change elements equal to the provided value | x == element <- value
|
| !=<-
| change elements not equal to the provided value | x != element <- value
|
| ><-
| change elements greater than the provided value | x > number <- value
|
| <<-
| change elements lower than the provided value | x < number <- value
|
| >=<-
| change elements greater or equal to the provided value | x >= number <- value
|
| <=<-
| change elements lower or equal to the provided value | x <= number <- value
|
| %in%<-
| change elements inside a set | x %in% set <- value
|
| %in{}%<-
| change elements inside a set | x %in{}% set <- value
|
| %in[]%<-
| change elements inside a closed interval | x %in[]% interval <- value
|
| %in()%<-
| change elements inside an open interval | x %in()% interval <- value
|
| %in[)%<-
| change elements inside an interval open on the right | x %in[)% interval <- value
|
| %in(]%<-
| change elements inside an interval open on the left | x %in(]% interval <- value
|
| %in~%<-
| change elements matching a regular expression | x %in~% pattern <- value
|
| %in~p%<-
| change elements matching a regular perl expression | x %in~p% pattern <- value
|
| %in~f%<-
| change elements matching a regular fixed expression | x %in~f% pattern <- value
|
| %in#%<-
| change elements that occur specified number of times | x %in#% count <- value
|
| %out%<-
| change elements outside a set | x %out% set <- value
|
| %out{}%<-
| change elements outside a set | x %out{}% set <- value
|
| %out[]%<-
| change elements outside a closed interval | x %out[]% interval <- value
|
| %out()%<-
| change elements outside an open interval | x %out()% interval <- value
|
| %out[)%<-
| change elements outside an interval open on the right | x %out[)% interval <- value
|
| %out(]%<-
| change elements outside an interval open on the left | x %out(]% interval <- value
|
| %out~%<-
| change elements not matching a regular expression | x %out~% pattern <- value
|
| %out~p%<-
| change elements not matching a regular perl expression | x %out~p% pattern <- value
|
| %out~f%<-
| change elements not matching a regular fixed expression | x %out~f% pattern <- value
|
| %out#%<-
| change elements that occur other than specified number of times | x %out#% count <- value
|
To give an assignment counterpart to <
we had to overload the <<-
operator, which explains the message when attaching the package.
This doesn't affect the behavior of the <<-
assignments.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.