Imprimer le contenu des chaînes et des variables sur la même ligne en R


198

Existe-t-il un moyen d'imprimer du texte et du contenu de variable sur la même ligne? Par exemple,

wd <- getwd()
print("Current working dir: ", wd)

Je n'ai rien trouvé sur la syntaxe qui me permettrait de le faire.

r  printing 

Réponses:


299

Vous pouvez utiliser pasteavecprint

print(paste0("Current working dir: ", wd))

ou cat

cat("Current working dir: ", wd)

8
Vous voulez probablement sep = ''ou vous obtiendrez un espace supplémentaire.
— hadley

8
En utilisant cat()j'obtiens un NULLà la fin :(
— ragesz

5
@ragesz je n'obtiens null à la fin que si vous mettez le chat à l'intérieur d'une impression comme: print(cat("test", var)) qui devrait êtrecat("test", var)
— Spidfire

62

{glue} offre une bien meilleure interpolation de chaînes, voir mon autre réponse . De plus, comme Dainis le mentionne à juste titre, ce sprintf()n'est pas sans problèmes.

Il y a aussi sprintf():

sprintf("Current working dir: %s", wd)

Pour imprimer sur la sortie de la console, utilisez cat()ou message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))

Une autre belle option! C'est très similaire à d'autres langages de script et très pratique si vous avez un texte où vous souhaitez implémenter plusieurs variables. Merci!

1
de loin l'option la plus pratique, surtout si vous composez un argument de fonction. avec de la pâte, il devient rapidement un gâchis illisible.
— user27636

2
Notez que sprintfcela ne s'imprime pas, il formate simplement la chaîne. Quelque chose comme print (sprintf (...)) est nécessaire dans les scripts.
— CHS

22

Ou en utilisant message

message("Current working dir: ", wd)

La réponse de @ agstudy est la plus appropriée ici


17

La façon la plus simple de le faire est d'utiliser paste()

> paste("Today is", date())
[1] "Today is Sat Feb 21 15:25:18 2015"

paste0() se traduirait par ce qui suit:

> paste0("Today is", date())
[1] "Today isSat Feb 21 15:30:46 2015"

Notez qu'il n'y a pas de séparateur par défaut entre la chaîne et x. L'utilisation d'un espace à la fin de la chaîne est une solution rapide:

> paste0("Today is ", date())
[1] "Today is Sat Feb 21 15:32:17 2015"

Combinez ensuite l'une ou l'autre fonction avec print()

> print(paste("This is", date()))
[1] "This is Sat Feb 21 15:34:23 2015"

Ou

> print(paste0("This is ", date()))
[1] "This is Sat Feb 21 15:34:56 2015"

Comme d'autres utilisateurs l'ont indiqué, vous pouvez également utiliser cat()


14

Le package {glue} offre une interpolation de chaîne. Dans l'exemple, {wd}est remplacé par le contenu de la variable. Les expressions complexes sont également prises en charge.

library(glue)

wd <- getwd()
glue("Current working dir: {wd}")
#> Current working dir: /tmp/RtmpteMv88/reprex46156826ee8c

Créé le 2019-05-13 par le package reprex (v0.2.1)

Notez que la sortie imprimée ne contient pas les [1]artefacts et les "guillemets, pour lesquels d'autres réponses sont utilisées cat().


8

Comme d'autres utilisateurs l'ont dit, cat () est probablement la meilleure option.

@krlmlr a suggéré d'utiliser sprintf () et c'est actuellement la troisième réponse classée. sprintf () n'est pas une bonne idée. De la documentation R:

La chaîne de format est transmise à la fonction sprintf du système d'exploitation, et des formats incorrects peuvent entraîner le blocage du processus R par ce dernier.

Il n'y a aucune bonne raison d'utiliser sprintf () sur cat ou d'autres options.


2

vous pouvez utiliser la méthode paste0 ou cat pour combiner une chaîne avec des valeurs variables dans R

Par exemple:

paste0("Value of A : ", a)

cat("Value of A : ", a)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.