7
votes

Le moyen le plus rapide de convertir numérique en caractère dans r

J'ai besoin de convertir un vecteur numérique en caractère dans R. Comme je le sais, il existe différentes manières (voir ci-dessous).

Il semble que les moyens les plus rapides sont Sprintf et GetTextf. P>

set.seed(1)
a <- round(runif(100000), 2)
system.time(b1 <- as.character(a))
   user  system elapsed 
  0.108   0.000   0.105 
system.time(b2 <- formatC(a))
   user  system elapsed 
  0.052   0.000   0.052 
system.time(b3 <- sprintf('%.2f', a))
   user  system elapsed 
  0.044   0.000   0.046 
system.time(b4 <- gettextf('%.2f', a))
   user  system elapsed 
  0.048   0.000   0.046 
system.time(b5 <- paste0('', a))
   user  system elapsed 
  0.124   0.000   0.129 

r

1 commentaires

Vous pouvez probablement trouver un couple de plus de façons de le faire dans ce récent thread Où j'ai demandé de transformer les booléens en entiers.


3 Réponses :


10
votes

En réalité, il semble que formatc sort plus vite: xxx

sortie: xxx

mon sessionInfo : xxx


0 commentaires

4
votes

Trois autres méthodes que je peux penser, dont aucune n'est aussi rapide que gettextf sont xxx

la dernière est fondamentalement as.character. Par défaut , dépêche de la méthode de contournement. Les horaires pour tous sont à peu près les mêmes que Coller (a)


2 commentaires

Merci. J'essaie de trouver les moyens les plus rapides de convertir le vecteur numérique en un vecteur de caractère.


D'accord. Je suis sûr que vous les avez déjà montrées :) Votre question demande s'il y a une autre manière de convertir numérique en caractères.



7
votes

Depuis que vous avez arrondi a code> à la précision finie, effectuez la conversion des valeurs uniques une fois et recherchez-les

> microbenchmark(f0(a), f1(a))
Unit: milliseconds
  expr      min       lq     mean   median       uq      max neval
 f0(a) 46.05171 46.89991 47.33683 47.42225 47.58196 52.43244   100
 f1(a) 10.97090 11.39974 11.48993 11.52598 11.58505 11.90506   100


1 commentaires

Merci pour votre conseil. Unique est une bonne suggestion car mes données réelles ont des valeurs dupliquées.