R'de bir dizenin uzunluğu nasıl bulunur?


348

Bir dizenin uzunluğunu (dizgideki karakter sayısı) R'ye bölmeden nasıl bulurum? Bir liste uzunluğunu bulmak nasıl biliyorum ama bir dize değil.

Peki ya Unicode dizeleri? Unicode dizesindeki uzunluğu (bayt cinsinden) ve karakter sayısını (runes, semboller) nasıl bulabilirim?

İlgili Soru:


1
anonim bir işlevle birlikte değerlendirme () işlevini kullanarak | vektör c (8, 4, 0). Anonim işleviniz yalnızca bir bağımsız değişken almalıdır | değişken olmak x.
uxi

Yanıtlar:


417

Bkz ?nchar. Örneğin:

> nchar("foo")
[1] 3
> set.seed(10)
> strn <- paste(sample(LETTERS, 10), collapse = "")
> strn
[1] "NHKPBEFTLY"
> nchar(strn)
[1] 10

55
Dikkatnchar(NA)
hadley

@hadley Gerçekten de, bu nedenle bir veya daha fazla NAs içeren herhangi bir karakter vektörü . (Yine de bu olduğu belgelenmiştir).
Gavin Simpson

7
Veya kullanım stri_lengthgelen stringi- bu NA adlı ile para cezası çalışır ve hızlıdır :) benim yazı kontrol edin!
bartektartanus

6
3.3.1'den itibaren temel varsayılanlar verilecek şekilde ayarlanmıştır nchar(NA) ## [1] NA: bkz. Nchar RDocumentation
leerssej

3
@IgorChubin bunu yeni bir soru olarak sormalısınız, neredeyse 2 yaşında bir soruyu düzenlemeyin.
Gavin Simpson

66

stringiPaketi ve stri_lengthişlevi kullan

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

Neden? Sunulan çözümler arasında HIZLI olduğu için :)

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

ve NA'larla da iyi çalışıyor

nchar(NA)
## [1] 2
stri_length(NA)
## [1] NA

1
Cevabınız ve büyük kütüphane için teşekkür ederim (doğru anladıysam kütüphaneniz). Unicode dizeleri ne olacak?
Igor Chubin

1
Çok iyi çalışıyor. Şu örneğe bakın: stri_length('\u0105') uzunluk birdir, ancak ... stri_numbytes('\u0105') 2 bayt kullanılır
bartektartanus

Bu güncellenmelidir çünkü nchar()şimdi allowNA = FALSE
Riley Finn

26

stringrPaketi de kullanabilirsiniz :

library(stringr)
str_length("foo")
[1] 3


8

KeepNA = TRUE seçeneği NA ile ilgili sorunları önler

nchar(NA)
## [1] 2
nchar(NA, keepNA=TRUE)
## [1] NA

1
3.3.1 itibariyle temel varsayılanlar verilecek şekilde ayarlanmıştır nchar(NA) ## [1] NA: bkz. Nchar RDocumentation
leerssej

6
nchar(YOURSTRING)

önce bir karakter vektörüne dönüştürmeniz gerekebilir;

nchar(as.character(YOURSTRING))

1
Bir faktör girişi hariç, zorlama tarafından gerçekleştirilir nchar. Faktör girişleri için ncharbir hata atar ve bu nedenle önce gösterdiğiniz gibi dönüşümü yapmanız gerekir.
Gavin Simpson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.