XXX
Ce qui me donne correctement:
R script here â® bla <- <SOMETHING - BEGIN> line1 line2 line3 <SOMETHING - END> â® more R script here
Cependant, il y a plusieurs problèmes. Tout d'abord, il est en retrait. Je n'ai pas à le faire, mais toute fonctionnalité d'indentation automatique le fera simplement revenir pour être aligné (ce que j'utilise couramment). Deuxièmement, cela nécessite des codes d'échappement si je souhaite utiliser le symbole de guillemet double par exemple.
Existe-t-il un moyen de faire quelque chose de similaire à la méthode Here-Document ( ), dans les scripts R?
J'utilise RStudio comme IDE, fonctionnant sous Windows. De préférence, il y aurait un moyen indépendant de la plate-forme de le faire.
EDIT
Avez-vous besoin d'avoir le texte dans le script R?
Oui.
Un exemple de ce que je veux faire:
> bla [1] "line1" "line2" "line3"
Là où l'exigence, encore une fois, est que je puisse tapez librement sans vous soucier de l'indentation automatique pour faire avancer les lignes, et pas besoin de vous soucier des codes d'échappement lorsque vous tapez des choses comme "
.
3 Réponses :
Si la création d'un document Rmarkdown au lieu d'un script R est une option, nous pourrions utiliser le moteur knitr cat
--- title: "Untitled" output: html_document --- ```{cat engine.opts=list(file='foo')} line1 line2 "line3" 'line4' ``` ```{r} bla <- readLines("foo") bla ```
Les deux problèmes peuvent être résolus avec la fonction scan
et deux petites astuces, je pense:
scan(text = ' line1 "line2" uses quotation mark line3 ', what = character(), sep = "\n") Read 3 items [1] "line1" "\"line2\" uses quotation mark" [3] "line3"
Lorsque vous mettez les guillemets dans une ligne qui leur est propre , vous n'avez pas de problème d'indentation automatique (testé avec RStudio). Si vous n'avez que des guillemets doubles dans le texte, vous pouvez utiliser des guillemets simples pour commencer et terminer votre objet caractère. Si vous avez des guillemets simples dans le texte, utilisez des guillemets doubles pour le caractère. Si vous avez les deux, vous devriez probablement utiliser la recherche et le remplacement pour les rendre uniformes.
J'ai également ajouté sep = "\ n"
, donc chaque ligne est un élément du résultat vecteur de caractères.
C'est également ce que j'avais à l'esprit, mais cela ne créerait-il pas un problème similaire si je souhaitais utiliser un guillemet simple dans mon texte?
Oui, ça le ferait. J'ai déjà modifié la réponse et ajouté cette ligne "Si vous avez les deux, vous devriez probablement utiliser la recherche et le remplacement pour les rendre uniformes." Les guillemets sont les seules choses dont vous auriez besoin pour échapper dans ce cas, donc je pense que c'est un inconvénient raisonnable. Mais, bien sûr, vous pouvez vérifier si quelqu'un d'autre propose une meilleure solution. Je ne le pense pas vraiment car cela semble être une caractéristique essentielle des scripts R.
Depuis la version R 4.0, nous avons des chaînes brutes (Voir ?Quotes
)
bla <- strsplit(bla, "\n")[[1]] #> [1] "line1" #> [2] "line2" #> [3] "\"line3\"" #> [4] "'line4'" #> [5] " Here is indentation" #> [6] "Here is a backslash \\"
Notez bien que cela donne une seule chaîne, pas des éléments séparés. Nous pouvons le fractionner avec strsplit
:
bla <- r"(line1 line2 "line3" 'line4' Here is indentation Here is a backslash \ )" #> [1] "line1\nline2\n\"line3\"\n'line4'\n Here is indentation\nHere is a backslash \\\n"
data.table :: fread ()
.. separator =\ n
répondra probablement à vos besoins? Sinon, veuillez fournir des exemples de données qui reproduisent vos problèmes.Je mettrais simplement le texte dans un fichier texte différent, puis je le lisais avec
readLines ()
ou des équivalents dans d'autres packages. Avez-vous besoin d'avoir le texte dans le scriptR
?@Wimpel
fread ()
est pour la lecture d'un fichier. Je veux lire le script lui-même.@JBGruber Je veux avoir le texte dans le script, oui.