# R: Count the Number of Characters (or Bytes or Width)

nchar {base} | R Documentation

## Count the Number of Characters (or Bytes or Width)

### Description

`nchar` takes a character vector as an argument and returns a vector whose elements contain the sizes of the corresponding elements of `x`.

`nzchar` is a fast way to find out if elements of a character vector are non-empty strings.

### Usage

    nchar(x, type = "chars", allowNA = FALSE)

    nzchar(x)

### Arguments

`x` | character vector, or a vector to be coerced to a character vector.
`type` | character string: partial matching to one of `c("bytes", "chars", "width")`. See Details.
`allowNA` | logical: show `NA` be returned for invalid multibyte strings (rather than throwing an error)?

### Details

The ‘size’ of a character string can be measured in one of three ways

`bytes`
  The number of bytes needed to store the string (plus in C a final terminator which is not counted).
`chars`
  The number of human-readable characters.
`width`
  The number of columns `cat` will use to print the string in a monospaced font. The same as `chars` if this cannot be calculated.

These will often be the same, and almost always will be in single-byte locales. There will be differences between the first two with multibyte character sequences, e.g. in UTF-8 locales. If the byte stream contains embedded `nul` bytes, `type = "bytes"` looks at all the bytes whereas the other two types look only at the string as printed by `cat`, up to the first `nul` byte.

The internal equivalent of the default method of `as.character` is performed on `x` (so there is no method dispatch). If you want to operate on non-vector objects passing them through `deparse` first will be required.

### Value

For `nchar`, an integer vector giving the sizes of each element, currently always `2` for missing values (for `NA`).
If `allowNA = TRUE` and an element is invalid in a multi-byte character set such as UTF-8, its number of characters and the width will be `NA`. Otherwise the number of characters will be non-negative, so `!is.na(nchar(x, "chars", TRUE))` is a test of validity.
Names, dims and dimnames are copied from the input.
For `nzchar`, a logical vector of the same length as `x`, true if and only if the element has non-zero length.

### Note

This does not by default give the number of characters that will be used to `print()` the string. Use `encodeString` to find the characters used to print the string.

Embedded `nul` bytes are included in the byte count (but not the final `nul`). In contrast, characters are counted up to the string terminator (the first `nul` that is not part of a character representation).

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

### See Also

`strwidth` giving width of strings for plotting; `paste`, `substr`, `strsplit`

### Examples

    x <- c("asfef", "qwerty", "yuiop[", "b", "stuff.blah.yech")
    nchar(x)
    # 5  6  6  1 15

    nchar(deparse(mean))
    # 18 17

[Package base version 2.6.0 Index]