Cetak string dan konten variabel pada baris yang sama di R

198

Apakah ada cara untuk mencetak teks dan konten variabel pada baris yang sama? Sebagai contoh,

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

Saya tidak dapat menemukan apa pun tentang sintaks yang memungkinkan saya melakukan ini.


sumber

Jawaban:

299

Anda bisa menggunakannya pastebersamaprint

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

atau cat

cat("Current working dir: ", wd)
agstudy
sumber
8
Anda mungkin ingin sep = ''atau Anda akan mendapatkan ruang ekstra.
Hadley
8
Menggunakan cat()saya mendapatkan NULLdi akhir :(
ragesz
5
@ ragesz saya hanya mendapatkan null pada akhirnya jika Anda memasukkan kucing ke dalam cetakan seperti: print(cat("test", var)) yang seharusnyacat("test", var)
Spidfire
62

{lem} menawarkan interpolasi string yang jauh lebih baik, lihat jawaban saya yang lain . Juga, seperti yang Dainis sebutkan, sprintf()bukan tanpa masalah.

Ada juga sprintf():

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

Untuk mencetak ke output konsol, gunakan cat()atau message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))
krlmlr
sumber
Pilihan bagus lainnya! Ini sangat mirip dengan bahasa skrip lain dan sangat nyaman jika Anda memiliki teks di mana Anda ingin menerapkan beberapa variabel. Terima kasih!
1
sejauh ini opsi yang paling nyaman, terutama jika Anda sedang menyusun argumen fungsi. dengan menempelkannya dengan cepat menjadi kekacauan yang tidak dapat dibaca.
user27636
2
Perhatikan bahwa sprintftidak mencetak, itu hanya memformat string. Sesuatu seperti cetak (sprintf (...)) diperlukan di dalam skrip.
CHS
22

Atau menggunakan message

message("Current working dir: ", wd)

@ agstudy menjawab lebih cocok di sini

Jilber Urbina
sumber
17

Cara termudah untuk melakukan ini adalah menggunakan paste()

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

paste0() akan menghasilkan yang berikut:

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

Perhatikan tidak ada pemisah default antara string dan x. Menggunakan spasi di akhir string adalah perbaikan cepat:

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

Kemudian gabungkan kedua fungsi dengan print()

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

Atau

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

Seperti yang dinyatakan oleh pengguna lain, Anda juga bisa menggunakan cat()

pengguna1526693
sumber
14

Paket {lem} menawarkan interpolasi string. Dalam contoh ini, {wd}diganti dengan isi variabel. Ekspresi kompleks juga didukung.

library(glue)

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

Dibuat pada 2019-05-13 oleh paket reprex (v0.2.1)

Perhatikan bagaimana hasil cetak tidak mengandung [1]artefak dan "tanda kutip, yang digunakan jawaban lain cat().

krlmlr
sumber
8

Seperti kata pengguna lain, cat () mungkin merupakan opsi terbaik.

@ krlmlr disarankan menggunakan sprintf () dan saat ini merupakan jawaban peringkat ketiga. sprintf () bukan ide yang baik. Dari dokumentasi R:

String format diturunkan fungsi sprintf OS, dan format yang salah dapat menyebabkan yang terakhir untuk crash proses R.

Tidak ada alasan bagus untuk menggunakan sprintf () di atas kucing atau opsi lain.

Dainis Boumber
sumber
2

Anda dapat menggunakan metode paste0 atau cat untuk menggabungkan string dengan nilai variabel di R

Sebagai contoh:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Pembuat kode
sumber