125 votes

Obtenir et supprimer le premier caractère d'une chaîne

Je voudrais faire des promenades en 2 dimensions en utilisant des chaînes de caractères en attribuant des valeurs différentes à chaque caractère. Je prévoyais de faire apparaître le premier caractère d'une chaîne, de l'utiliser et de le répéter pour le reste de la chaîne.

Comment puis-je réaliser quelque chose comme ça?

 x <- 'hello stackoverflow'
 

J'aimerais pouvoir faire quelque chose comme ça:

 a <- x.pop[1]

print(a)

'h'
print(x)

'ello stackoverflow'
 

201voto

Richie Cotton Points 35365

Voir ?substring .

 x <- 'hello stackoverflow'
substring(x, 1, 1)
substring(x, 2)
 

L'idée de disposer d'une méthode pop renvoyant une valeur et ayant pour effet secondaire de mettre à jour les données stockées dans x est essentiellement un concept issu de la programmation orientée objet. Ainsi, plutôt que de définir une fonction pop pour agir sur des vecteurs de caractères, nous pouvons créer une classe de référence avec une méthode pop .

 PopStringFactory <- setRefClass(
  "PopString",
  fields = list(
    x = "character"  
  ),
  methods = list(
    initialize = function(x)
    {
      x <<- x
    },
    pop = function(n = 1)
    {
      if(nchar(x) == 0)
      {
        warning("Nothing to pop.")
        return("")
      }
      first <- substring(x, 1, n)
      x <<- substring(x, n + 1)
      first
    }
  )
)

x <- PopStringFactory$new("hello stackoverflow")
x
## Reference class object of class "PopString"
## Field "x":
## [1] "hello stackoverflow"
replicate(nchar(x$x), x$pop())
## [1] "h" "e" "l" "l" "o" " " "s" "t" "a" "c" "k" "o" "v" "e" "r" "f" "l" "o" "w"
 

11voto

Richard Scriven Points 15577

substring est certainement le meilleur choix, mais voici une alternative strsplit , car je n'en ai pas encore vu.

 > x <- 'hello stackoverflow'
> strsplit(x, '')[[1]][1]
## [1] "h"
 

ou équivalent

 > unlist(strsplit(x, ''))[1]
## [1] "h"
 

Et vous pouvez paste reconstituer le reste de la chaîne.

 > paste0(strsplit(x, '')[[1]][-1], collapse = '')
## [1] "ello stackoverflow"
 

11voto

bartektartanus Points 2472

Utilisez cette fonction de stringi package

 > x <- 'hello stackoverflow'
> stri_sub(x,2)
[1] "ello stackoverflow"
 

5voto

jon Points 3438

enlever les premiers caractères:

 x <- 'hello stackoverflow'
substring(x, 2, nchar(x))
 

L'idée est de sélectionner tous les caractères allant de 2 au nombre de caractères dans x. Ceci est important lorsque vous avez un nombre inégal de caractères dans un mot ou une phrase.

La sélection de la première lettre est triviale comme réponses précédentes:

 substring(x,1,1)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X