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.