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.


la source

Réponses:

299

Vous pouvez utiliser pasteavecprint

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

ou cat

cat("Current working dir: ", wd)
étude
la source
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))
krlmlr
la source
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

Jilber Urbina
la source
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()

user1526693
la source
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().

krlmlr
la source
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.

Dainis Boumber
la source
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)
Codemaker
la source