Wydrukuj ciąg i zmienną zawartość w tym samym wierszu w R.

198

Czy istnieje sposób drukowania tekstu i treści zmiennych w tym samym wierszu? Na przykład,

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

Nie mogłem znaleźć niczego na temat składni, która by mi na to pozwoliła.


źródło

Odpowiedzi:

299

Możesz używać pastezprint

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

lub cat

cat("Current working dir: ", wd)
agstudy
źródło
8
Prawdopodobnie chcesz sep = ''lub dostaniesz dodatkowe miejsce.
hadley,
8
Za pomocą cat()otrzymuję NULLna końcu :(
ragesz
5
@ragesz dostaję zero na końcu tylko wtedy, gdy umieścisz kota wewnątrz wydruku takiego jak: print(cat("test", var)) powinno byćcat("test", var)
Spidfire
62

{klej} oferuje znacznie lepszą interpolację łańcuchów, patrz moja inna odpowiedź . Ponadto, jak słusznie wspomina Dainis, sprintf()nie jest bez problemów.

Istnieją również sprintf():

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

Aby wydrukować na wyjściu konsoli, użyj cat()lub message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))
krlmlr
źródło
Kolejna fajna opcja! Jest to bardzo podobne do innych języków skryptowych i bardzo wygodne, jeśli masz tekst, w którym chcesz zaimplementować wiele zmiennych. Dzięki!
1
zdecydowanie najwygodniejsza opcja, szczególnie jeśli tworzysz argument funkcji. po wklejeniu szybko staje się nieczytelnym bałaganem.
user27636,
2
Pamiętaj, że sprintfnie drukuje, po prostu formatuje ciąg. Coś takiego jak print (sprintf (...)) jest konieczne w skryptach.
CHS
22

Lub używając message

message("Current working dir: ", wd)

Odpowiedź @ agstudy jest tutaj bardziej odpowiednia

Jilber Urbina
źródło
17

Najłatwiejszym sposobem na to jest użycie paste()

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

paste0() spowodowałoby:

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

Zauważ, że nie ma domyślnego separatora między ciągiem a x. Użycie spacji na końcu ciągu to szybka poprawka:

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

Następnie połącz dowolną funkcję z print()

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

Lub

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

Jak stwierdzili inni użytkownicy, możesz także użyć cat()

użytkownik1526693
źródło
14

Pakiet {glue} oferuje interpolację ciągów. W tym przykładzie {wd}jest podstawiony zawartością zmiennej. Obsługiwane są również złożone wyrażenia.

library(glue)

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

Utworzono 2019-05-13 przez pakiet reprezentx (v0.2.1)

Zwróć uwagę, że wydruk nie zawiera [1]artefaktów i "cudzysłowów, dla których używane są inne odpowiedzi cat().

krlmlr
źródło
8

Jak powiedzieli inni użytkownicy, cat () jest prawdopodobnie najlepszą opcją.

@krlmlr zasugerował użycie sprintf () i jest to obecnie trzecia pozycja w rankingu. sprintf () nie jest dobrym pomysłem. Z dokumentacji R:

Łańcuch formatujący jest przekazywany w dół do funkcji sprintf systemu operacyjnego, a nieprawidłowe formaty mogą spowodować, że ten ostatni zawiesi proces R.

Nie ma dobrego powodu, aby używać sprintf () zamiast cat lub innych opcji.

Dainis Boumber
źródło
2

możesz użyć metody paste0 lub cat, aby połączyć łańcuch ze zmiennymi wartościami w R

Na przykład:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Codemaker
źródło