web-dev-qa-db-fra.com

Itération sur les caractères de la chaîne R

Quelqu'un pourrait-il m'expliquer pourquoi cela n'imprime pas tous les nombres séparément dans R.

numberstring <- "0123456789"

for (number in numberstring) {
  print(number)
}

Les chaînes ne sont-elles pas juste des tableaux de caractères? Quel est le moyen de le faire en R?

11
Lukasz

En R, "0123456789" est un vecteur de caractères de longueur 1.

Si vous souhaitez parcourir les caractères, vous devez fractionner la chaîne en un vecteur de caractères uniques à l'aide de strsplit.

numberstring <- "0123456789"

numberstring_split <- strsplit(numberstring, "")[[1]]

for (number in numberstring_split) {
  print(number)
}
# [1] "0"
# [1] "1"
# [1] "2"
# [1] "3"
# [1] "4"
# [1] "5"
# [1] "6"
# [1] "7"
# [1] "8"
# [1] "9"
21
Sven Hohenstein

Juste pour le plaisir, voici quelques autres façons de diviser une chaîne à chaque caractère.

x <- "0123456789"
substring(x, 1:nchar(x), 1:nchar(x))
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
regmatches(x, gregexpr(".", x))[[1]]
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 
scan(text = gsub("(.)", "\\1 ", x), what = character())
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
5
Rich Scriven

Votre question n’est pas claire à 100% quant au résultat souhaité (imprimez chaque caractère séparément d’une chaîne ou stockez chaque nombre de manière à ce que la boucle d’impression donnée produise chaque nombre sur sa propre ligne). Pour stocker des nombres tels qu’ils s’impriment en utilisant la boucle que vous avez incluse:

numberstring<-c(0,1,2,3,4,5,6,7,8,9)
for(number in numberstring){print(number);}

[1] 0
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
> 
0
Greg Syme