Вывести строку и содержимое переменной на одной строке в R

199

Есть ли способ напечатать текст и переменное содержимое в одной строке? Например,

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

Я не мог найти ничего о синтаксисе, который позволил бы мне сделать это.


источник

Ответы:

301

Вы можете использовать pasteсprint

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

или cat

cat("Current working dir: ", wd)
agstudy
источник
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))
krlmlr
источник
Еще один приятный вариант! Это очень похоже на другие языки сценариев и очень удобно, если у вас есть текст, в котором вы хотите реализовать несколько переменных. Спасибо!
1
безусловно, самый удобный вариант, особенно если вы составляете аргумент функции. с пастой это быстро становится нечитаемым беспорядком.
user27636 26.12.15
2
Обратите внимание, что sprintfне печатает, он просто форматирует строку. Что-то вроде print (sprintf (...)) необходимо внутри скриптов.
CHS
22

Или используя message

message("Current working dir: ", wd)

Ответ @ agstudy здесь больше подходит

Джилбер Урбина
источник
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()

user1526693
источник
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().

оборота krlmlr
источник
8

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

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

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

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

Дайнис Бамбер
источник
2

Вы можете использовать метод paste0 или cat, чтобы объединить строку со значениями переменной в R

Например:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Codemaker
источник