substring is compatible with S, with first and
  last instead of start and stop.
  For vector arguments, it expands the arguments cyclically to the
  length of the longest provided none are of zero length.
When extracting, if start is larger than the string length then
  "" is returned.
For the extraction functions, x or text will be
  converted to a character vector by as.character if it is not
  already one.
For the replacement functions, if start is larger than the
  string length then no replacement is done.  If the portion to be
  replaced is longer than the replacement string, then only the
  portion the length of the string is replaced.
If any argument is an NA element, the corresponding element of
  the answer is NA.
Elements of the result will be have the encoding declared as that of
  the current locale (see Encoding if the corresponding
  input had a declared Latin-1 or UTF-8 encoding and the current locale
  is either Latin-1 or UTF-8.
If an input element has declared "bytes" encoding (see
  Encoding, the subsetting is done in units of bytes not
  characters.