Je vis un temps très difficile avec R ces derniers temps.
Je ne suis pas un utilisateur expert, mais j'essaie d'utiliser R pour lire un fichier texte brut (.txt
) et en capturer chaque ligne. Après cela, je veux traiter de ces lignes et faire des pauses et des modifications dans le texte.
Voici le code que j'utilise:
fileName <- "C:/MyFolder/TEXT_TO_BE_PROCESSED.txt"
con <- file(fileName,open="r")
line <- readLines(con)
close(con)
Il lit le texte et la ligne se casse parfaitement. Mais je ne comprends pas comment fonctionne l’objet créé line
.
L'objet line
créé avec ce code a la classe: character
et la longueur [57]
. Si je tape line[1]
, il affiche exactement le texte de la première ligne. Mais si je tape
length(line[1])
il me renvoie [1]
.
Je voudrais savoir comment puis-je transformer cette chaîne de length == 1
qui contient 518 en fait en une chaîne de length == 518
.
Est-ce que quelqu'un sait ce que je fais mal?
Je n'ai pas nécessairement besoin d'utiliser la fonction readLines()
. J'ai fait des recherches et trouvé également la fonction scan()
, mais je me suis retrouvé dans le même cas où une chaîne immuable de 518 caractères mais length == 1
.
J'espère que j'ai été assez clair sur mon doute. Désolé pour le mauvais anglais.
Supposons que txt
soit le texte de la ligne 1 de vos données que vous avez lu avec readLines
.
Ensuite, si vous souhaitez le scinder en chaînes séparées, chacune étant un mot, vous pouvez utiliser strsplit
, en scindant l'espace entre chaque mot.
> txt <- paste0(letters[1:10], LETTERS[1:10], collapse = " ")
> txt
## [1] "aA bB cC dD eE fF gG hH iI jJ" ## character vector of length 1
> length(txt)
[1] 1
> newTxt <- unlist(strsplit(txt, split = "\\s")) ## split the string at the spaces
> newTxt
## [1] "aA" "bB" "cC" "dD" "eE" "fF" "gG" "hH" "iI" "jJ"
## now the text is a character vector of length 10
> length(newTxt)
[1] 10
Vous pouvez d’abord condenser ce code sur une seule ligne, les 3 autres lignes ne faisant que créer des objets inutiles.
line <- readLines("C:/MyFolder/TEXT_TO_BE_PROCESSED.txt")
Le si vous voulez savoir combien de mots sont séparés par une espace
words <- sapply(line,function(x) length(unlist(strsplit(x,split=" "))))
Si vous omettez l'argument length
dans ce qui précède, vous obtenez une liste de vecteurs de caractères des mots de chaque ligne.
Que diriez-vous:
con <- file(fileName, open='r')
text <- readLines(con)[[1]]
pour obtenir le texte de la première ligne du fichier.