Je veux diviser une ligne dans un script R sur plusieurs lignes (car elle est trop longue). Comment je fais ça?
Plus précisément, j'ai une ligne telle que
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
Est-il possible de diviser le long chemin sur plusieurs lignes? j'ai essayé
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
avec return
clé à la fin de la première ligne; mais cela ne fonctionne pas.
Merci.
paste0
n'existait pas encore lorsque j'ai écrit la réponse il y a plus de 2 ans.Bah, les commentaires sont trop petits. Quoi qu'il en soit, @Dirk a tout à fait raison.
R n'a pas besoin d'être informé que le code commence à la ligne suivante. Il est plus intelligent que Python ;-) et continuera simplement à lire la ligne suivante chaque fois qu'il considérera l'instruction comme "non terminée". En fait, dans votre cas, il est également passé à la ligne suivante, mais R prend le retour comme un caractère lorsqu'il est placé entre "".
Attention, vous devrez vous assurer que votre code n'est pas terminé. Comparer
avec
Ainsi, lors de la diffusion de code sur plusieurs lignes, vous devez vous assurer que R sait que quelque chose arrive, soit en:
Lorsque nous parlons de chaînes, cela fonctionne toujours, mais vous devez être un peu prudent. Vous pouvez ouvrir les guillemets et R lira jusqu'à ce que vous le fermiez. Mais chaque caractère, y compris la nouvelle ligne, sera vu comme faisant partie de la chaîne:
C'est la raison pour laquelle dans ce cas, votre code n'a pas fonctionné: un chemin ne peut pas contenir de caractère de nouvelle ligne (
\n
). C'est aussi pourquoi il vaut mieux utiliser la solution avecpaste()
oupaste0()
Dirk proposée.la source
paste("~one",\n"/two")
vous avez juste besoin("~one" \n "/two")
. laissez tomber les virgules et lepaste
. Je ne cherche pas la langue. J'utilise les deux langues mais j'ai toujours pensé que la pâte était une gêne.("one"\n "/one.one" # some comment\n "/two")'
exemples dans stackoverflow.com/questions/10660435/…leaving a bracket open, or ending the line with an operator
ces deux sont la voie à suivre.La méthode de Dirk ci-dessus fonctionnera absolument, mais si vous cherchez un moyen d'apporter une longue chaîne où les espaces / la structure sont importants à préserver (exemple: une requête SQL utilisant RODBC), il existe une solution en deux étapes.
1) Amenez la chaîne de texte sur plusieurs lignes
2) R introduira un tas de
\n
personnages. Supprimez-les avecstrwrap()
, ce qui détruit les espaces, conformément à la documentation :En disant à strwrap d'encapsuler votre texte sur une très, très longue ligne, vous obtenez un vecteur de caractère unique sans espaces / caractères de nouvelle ligne.
la source
strwrap
peut renvoyer un vecteur de plusieurs chaînes même si la chaîne source ne dépasse pas 10 000 caractères. Essayezstrwrap("a\n\nb")
. Il renverra un vecteur de longueur 3 et vous devez le recoller enpaste(strwrap("a\n\nb"), collapse=" ")
utilisant une colle de caractère espace pour réduire le vecteur.Pour ce cas particulier, il y a
file.path
:la source
Je sais que cet article est ancien, mais j'ai eu une situation comme celle-ci et je veux juste partager ma solution. Toutes les réponses ci-dessus fonctionnent bien. Mais si vous avez un code comme ceux de la syntaxe de chaînage data.table, cela devient un peu difficile. par exemple, j'ai eu un problème comme celui-ci.
mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][, Rain:=tstrsplit(files$file, "/")[1:4][[2]]][, Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][, Geom:=tstrsplit(files$file, "/")[1:4][[4]]][
fois]<=12000]
J'ai essayé la plupart des suggestions ci-dessus et elles n'ont pas fonctionné. mais j'ai compris qu'ils pouvaient être séparés après la virgule à l'intérieur
[]
. Le fractionnement][
ne fonctionne pas.la source