ip_address: Vector of IP addresses

View source: R/ip_address.R

ip_addressR Documentation

Vector of IP addresses


Construct a vector of IP addresses.


ip_address(x = character())



A character vector of IP addresses, in dot-decimal notation (IPv4) or hexadecimal notation (IPv6)


An address in IPv4 space uses 32-bits. It is usually represented as 4 groups of 8 bits, each shown as decimal digits (e.g. ⁠⁠). This is known as dot-decimal notation.

An address in IPv6 space uses 128-bits. It is usually represented as 8 groups of 16 bits, each shown as hexadecimal digits (e.g. ⁠2001:0db8:85a3:0000:0000:8a2e:0370:7334⁠). This representation can also be compressed by removing leading zeros and replacing consecutive groups of zeros with double-colon (e.g. ⁠2001:db8:85a3::8a2e:370:7334⁠). Finally, there is also the dual representation. This expresses the final two groups as an IPv4 address (e.g. ⁠2001:db8:85a3::8a2e:⁠).

The ip_address() constructor accepts a character vector of IP addresses in these two formats. It checks whether each string is a valid IPv4 or IPv6 address, and converts it to an ip_address object. If the input is invalid, a warning is emitted and NA is stored instead.

When casting an ip_address object back to a character vector using as.character(), IPv6 addresses are reduced to their compressed representation. A special case is IPv4-mapped IPv6 addresses (see is_ipv4_mapped()), which are returned in the dual representation (e.g. ⁠::ffff:⁠).

ip_address vectors support a number of operators.


An S3 vector of class ip_address

See Also

ip_operators, vignette("ip-data")


# supports IPv4 and IPv6 simultaneously
ip_address(c("", "2001:db8::8a2e:370:7334"))

# validates inputs and replaces with NA
ip_address(c("", ""))

ipaddress documentation built on April 4, 2023, 9:09 a.m.