Como encontrar o comprimento de uma string em R

348

Como encontrar o comprimento de uma string (número de caracteres em uma string) sem dividi-lo em R? Eu sei como encontrar o comprimento de uma lista, mas não de uma string.

E as strings Unicode? Como encontro o comprimento (em bytes) e o número de caracteres (runas, símbolos) em uma string Unicode?

Pergunta relacionada:

Igor Chubin
fonte
11
usando Evalu () junto com uma função anônima para retornar o último elemento de | o vetor c (8, 4, 0). Sua função anônima deve receber apenas um argumento que deve | ser uma variável x.
uxi

Respostas:

417

Veja ?nchar. Por exemplo:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10
Gavin Simpson
fonte
55
Cuidadonchar(NA)
hadley 19/03
@hadley De fato, ou, nesse caso, qualquer vetor de caractere com um ou mais NAs. (Embora isso esteja documentado).
Gavin Simpson
7
Ou use stri_lengthfrom stringi- ele funciona bem com NA e é mais rápido :) Confira meu post!
Bartektartanus
6
A partir de 3.3.1 os padrões básicos são definidos para dar nchar(NA) ## [1] NA: ver nchar RDocumentation
leerssej
3
@IgorChubin, você deve fazer isso como uma nova pergunta, não editar uma de quase 2 anos.
Gavin Simpson
66

Usar stringipacote e stri_lengthfunção

> stri_length(c("ala ma kota","ABC",NA))
[1] 11  3 NA

Por quê? Porque é o mais rápido entre as soluções apresentadas :)

require(microbenchmark)
require(stringi)
require(stringr)
x <- c(letters,NA,paste(sample(letters,2000,TRUE),collapse=" "))
microbenchmark(nchar(x),str_length(x),stri_length(x))
Unit: microseconds
           expr    min     lq  median      uq     max neval
       nchar(x) 11.868 12.776 13.1590 13.6475  41.815   100
  str_length(x) 30.715 33.159 33.6825 34.1360 173.400   100
 stri_length(x)  2.653  3.281  4.0495  4.5380  19.966   100

e também funciona bem com NA

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA
bartektartanus
fonte
11
Obrigado pela resposta e pela ótima biblioteca (é sua biblioteca se eu entendi direito). E as strings Unicode?
Igor Chubin
11
Funciona bem também. Veja este exemplo: stri_length('\u0105') comprimento é um, mas ... stri_numbytes('\u0105') 2 bytes são usados
bartektartanus
Isso deve ser atualizado porque nchar()agora tem um contas argumento para NA de:allowNA = FALSE
Riley Finn
26

Você também pode usar o stringrpacote:

library(stringr)
str_length("foo")
[1] 3
johannes
fonte
25
nchar("STRING")

Confira isso

sobingt
fonte
8

A opção keepNA = TRUE evita problemas com o NA

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA
Thomas Buhl
fonte
11
A partir de 3.3.1 os padrões básicos são definidos para dar nchar(NA) ## [1] NA: ver nchar RDocumentation
leerssej
6
nchar(YOURSTRING)

pode ser necessário converter primeiro um vetor de caractere;

nchar(as.character(YOURSTRING))
Jonathan
fonte
11
Com exceção de uma entrada de fator, a coerção é realizada por nchar. Para entradas de fator, nchargerará um erro e, portanto, você precisará fazer a conversão primeiro, como mostra.
Gavin Simpson