Imprimir string e conteúdo variável na mesma linha em R

198

Existe uma maneira de imprimir texto e conteúdo variável na mesma linha? Por exemplo,

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

Não consegui encontrar nada sobre a sintaxe que me permitisse fazer isso.


fonte

Respostas:

299

Você pode usar pastecomprint

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

ou cat

cat("Current working dir: ", wd)
estudo
fonte
8
Você provavelmente quer sep = ''ou terá um espaço extra.
Hadley
8
Usando cat()I get a NULLno final :(
ragesz 13/06
5
@ragesz i só obter nulo no final, se você colocar o interior gato de uma impressão de como: print(cat("test", var)) o que deveria sercat("test", var)
Spidfire
62

{glue} oferece uma interpolação de cordas muito melhor, veja minha outra resposta . Além disso, como Dainis menciona, sprintf()não é sem problemas.

Há também sprintf():

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

Para imprimir na saída do console, use cat()ou message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))
krlmlr
fonte
Outra boa opção! Isso é muito semelhante a outras linguagens de script e muito conveniente se você tiver um texto em que deseja implementar várias variáveis. Obrigado!
1
de longe a opção mais conveniente, especialmente se você estiver compondo um argumento de função. com colar rapidamente se torna uma bagunça ilegível.
user27636
2
Observe que sprintfnão imprime, apenas formata a sequência. Algo como print (sprintf (...)) é necessário dentro dos scripts.
CHS
22

Ou usando message

message("Current working dir: ", wd)

A resposta do @ agstudy é a mais adequada aqui

Jilber Urbina
fonte
17

A maneira mais fácil de fazer isso é usar paste()

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

paste0() resultaria no seguinte:

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

Observe que não há separador padrão entre a cadeia ex. Usar um espaço no final da string é uma solução rápida:

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

Em seguida, combine uma das funções com print()

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

Ou

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

Como outros usuários declararam, você também pode usar cat()

user1526693
fonte
14

O pacote {glue} oferece interpolação de strings. No exemplo, {wd}é substituído pelo conteúdo da variável Expressões complexas também são suportadas.

library(glue)

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

Criado em 2019-05-13 pelo pacote reprex (v0.2.1)

Observe como a saída impressa não contém os [1]artefatos e as "aspas, para os quais outras respostas são usadas cat().

krlmlr
fonte
8

Como outros usuários disseram, cat () é provavelmente a melhor opção.

@krlmlr sugeriu o uso de sprintf () e atualmente é a terceira resposta classificada. sprintf () não é uma boa ideia. Da documentação do R:

A string de formato é transmitida para a função sprintf do sistema operacional e formatos incorretos podem causar o último travamento do processo R.

Não há uma boa razão para usar sprintf () sobre gato ou outras opções.

Dainis Boumber
fonte
2

você pode usar o método paste0 ou cat para combinar string com valores variáveis ​​em R

Por exemplo:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Codemaker
fonte