Друкуйте рядок та змінні вмісту на одному рядку в R


199

Чи є спосіб надрукувати текст і змінні вмісти в одному рядку? Наприклад,

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

Я не міг знайти нічого про синтаксис, який би дозволив мені це зробити.

r  printing 

Відповіді:


301

Ви можете використовувати pasteзprint

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

або cat

cat("Current working dir: ", wd)

8
Ви, мабуть, хочете sep = ''або отримаєте додатковий простір.
хадлі

8
Використовуючи, cat()я отримую a NULLв кінці :(
ragesz

5
@ragesz я отримаю нульове значення лише в тому випадку, якщо помістити кішку всередину друку типу: print(cat("test", var)) що має бутиcat("test", var)
Spidfire

62

{glue} пропонує набагато кращу інтерполяцію рядків, дивіться іншу мою відповідь . Також, як справедливо зазначає Дайніс, sprintf()не без проблем.

Також є sprintf():

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

Для друку на вихід консолі використовуйте cat()або message():

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

Ще один приємний варіант! Це дуже схоже на інші мови сценаріїв і дуже зручно, якщо у вас є текст, де ви хочете реалізувати кілька змінних. Дякую!

1
на сьогоднішній день найзручніший варіант, особливо якщо ви складаєте аргумент функції. з пастою швидко стає нечитабельним безладом.
user27636

2
Зауважте, що sprintfне друкується, він просто форматує рядок. Щось на зразок друку (sprintf (...)) необхідно в сценаріях.
CHS


17

Найпростіший спосіб зробити це - використовувати paste()

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

paste0() це призведе до наступного:

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

Зауважте, що між рядком і x немає сепаратора за замовчуванням. Використання пробілу в кінці рядка - це швидке виправлення:

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

Потім поєднайте будь-яку функцію з print()

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

Або

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

Як заявили інші користувачі, ви також можете використовувати cat()


14

Пакет {glue} пропонує рядкову інтерполяцію. У прикладі {wd}підміняється вміст змінної. Складні вирази також підтримуються.

library(glue)

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

Створено 2019-05-13 пакетом reprex (v0.2.1)

Зверніть увагу, як друкований вихід не містить [1]артефактів і "лапок, для яких використовуються інші відповіді cat().


8

Як казали інші користувачі, cat () - це, мабуть, найкращий варіант.

@krlmlr запропонував використовувати sprintf () і наразі це відповідь третьої позиції. sprintf () - непогана ідея. З R документації:

Рядок формату передається за допомогою функції sprintf ОС, і неправильні формати можуть призвести до того, що останній руйнує процес R.

Немає вагомих причин використовувати sprintf () над котом чи іншими параметрами.


2

ви можете використовувати метод paste0 або cat для поєднання рядка зі змінними значеннями в R

Наприклад:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.