Dize ve değişken içerikleri R'de aynı satıra yazdır


199

Aynı satıra metin ve değişken içerik yazdırmanın bir yolu var mı? Örneğin,

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

Söz dizimi hakkında bunu yapmama izin verecek hiçbir şey bulamadım.

r  printing 

Yanıtlar:


301

Sen kullanabilirsiniz pasteileprint

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

veya cat

cat("Current working dir: ", wd)

8
Muhtemelen istersiniz sep = ''veya fazladan bir alan elde edersiniz.
hadley

8
Kullanılması cat()Şey alabilir NULL:( sonunda
ragesz

5
@ ragesz ben sadece kedi gibi bir baskı içine kedi koyarsanız sonunda null olsun: print(cat("test", var)) olması gerekencat("test", var)
Spidfire

62

{glue} çok daha iyi dize enterpolasyonu sunuyor, diğer cevabımı görün . Ayrıca, Dainis'in haklı olarak belirttiği gibi, sprintf()problemsiz değildir.

Ayrıca sprintf():

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

Konsol çıkışına yazdırmak için cat()veya tuşunu kullanın message():

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

Başka bir güzel seçenek! Bu, diğer komut dosyası dillerine çok benzer ve birden çok değişken uygulamak istediğiniz bir metniniz varsa çok kullanışlıdır. Teşekkürler!

1
açık ara en uygun seçenek, özellikle de bir işlev argümanı oluşturuyorsanız. macunla çabucak okunamayan bir karmaşa haline gelir.
user27636

2
Not sprintfyazdırmıyor, sadece dize biçimlendirir. Betiklerin içinde print (sprintf (...)) gibi bir şey gereklidir.
CHS

22

Veya kullanarak message

message("Current working dir: ", wd)

@ agstudy'nin cevabı burada daha uygun


17

Bunu yapmanın en kolay yolu paste()

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

paste0() aşağıdakilerle sonuçlanır:

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

Dize ve x arasında varsayılan ayırıcı olmadığına dikkat edin. Dizenin sonunda bir boşluk kullanmak hızlı bir çözümdür:

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

Sonra her iki işlevi de print()

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

Veya

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

Diğer kullanıcıların belirttiği gibi, cat()


14

{Tutkal} paket dize interpolasyon sunuyor. Örnekte, {wd}değişkenin içeriği ile ikame edilmiştir. Karmaşık ifadeler de desteklenir.

library(glue)

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

2019-05-13 tarihinde reprex paketi tarafından oluşturuldu (v0.2.1)

Yazdırılan çıktının, diğer yanıtların kullandığı [1]artefaktları ve "alıntıları nasıl içermediğine dikkat edin cat().


8

Diğer kullanıcıların söylediği gibi, cat () muhtemelen en iyi seçenektir.

@krlmlr sprintf () kullanılmasını önerdi ve şu anda üçüncü sırada yer alan cevap. sprintf () iyi bir fikir değildir. R belgelerinden:

Biçim dizesi işletim sisteminin sprintf işlevinden geçirilir ve yanlış biçimler ikincisinin R sürecini kilitlemesine neden olabilir.

Sprintf () işlevini kedi veya diğer seçenekler üzerinde kullanmak için iyi bir neden yoktur.


2

string'i R'deki değişken değerlerle birleştirmek için paste0 veya cat yöntemini kullanabilirsiniz

Örneğin:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.