Вывести строку и содержимое переменной на одной строке в 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()я получаю NULLв конце :(
ragesz

5
@ragesz Я получаю нулевое значение в конце, только если вы поместите кота в отпечаток, как: print(cat("test", var)) что должно бытьcat("test", var)
Spidfire

62

{клей} предлагает гораздо лучшую интерполяцию строк, см. мой другой ответ . Также, как справедливо отмечает Дайнис, 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 26.12.15

2
Обратите внимание, что sprintfне печатает, он просто форматирует строку. Что-то вроде print (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 пакетом представлением (v0.2.1)

Обратите внимание, что печатный вывод не содержит [1]артефактов и "кавычек, для которых используются другие ответы cat().


8

Как говорили другие пользователи, cat (), вероятно, лучший вариант.

@krlmlr предложил использовать sprintf (), и в настоящее время это третий по счету ответ. sprintf () не очень хорошая идея. Из документации R:

Строка формата передается в функцию sprintf операционной системы, и неправильные форматы могут привести к сбою последнего процесса R.

Нет веских причин использовать sprintf () поверх cat или других опций.


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.