Insérer des sauts de ligne dans une longue chaîne
Voici une fonction que j'ai écrit pour briser une longue chaîne dans les lignes ne dépassent pas une longueur donnée
strBreakInLines <- function(s, breakAt=90, prepend="") {
words <- unlist(strsplit(s, " "))
if (length(words)<2) return(s)
wordLen <- unlist(Map(nchar, words))
lineLen <- wordLen[1]
res <- words[1]
lineBreak <- paste("\n", prepend, sep="")
for (i in 2:length(words)) {
lineLen <- lineLen+wordLen[i]
if (lineLen < breakAt)
res <- paste(res, words[i], sep=" ")
else {
res <- paste(res, words[i], sep=lineBreak)
lineLen <- 0
}
}
return(res)
}
Il travaille pour le problème que j'avais, mais je me demande si je peux apprendre quelque chose ici. Est-il plus ou moins une solution plus efficace, en particulier puis-je me débarrasser de la boucle for?
source d'informationauteur Karsten W.
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet:
Il va se casser la chaîne "s" dans les lignes avec un maximum de 90 caractères (à l'exclusion du caractère de saut de ligne "\n", mais y compris inter-mot espaces), à moins qu'il y a le mot lui-même à plus de 90 caractères, alors que le mot lui-même qui va occuper l'ensemble de la ligne.
Par ailleurs, votre fonction semble rompu --- vous devez remplacer
avec
Par souci d'exhaustivité, Karsten W. commentaire de points à
strwrap
qui est la méthode la plus simple de la fonction à retenir:et à correspondre exactement à la solution proposée dans la question, la chaîne doit être collé par la suite:
Ce post est fait délibérément wiki de la communauté depuis l'honneur de trouver la fonction n'est pas la mienne.
Pour plus d'exhaustivité, il y a:
stringi::stri_wrap
stringr::str_wrap
(qui vient en fin de compte les appelsstringi::stri_wrap
La
stringi
version de traiter avec les jeux de caractères de mieux (il est construit sur la bibliothèque ICU) et c'est en C/C++ donc ça va finalement être plus rapide quebase::strwrap
. Il est également vectorisé sur lestr
paramètre.Vous pouvez regarder par exemple la
write.dcf()
FONCTION dans R lui-même; il utilise également une boucle donc, rien à avoir honte de ici.L'objectif premier est d'obtenir la droite --- voir Chambres (2008).