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.