Quebrar character vector com múltiplas linhas

Oi, pessoal!

Quero mostrar no console um vetor de characters grande, com mais de 80 caracteres. Para facilitar a leitura usei a função stringr::str_wrap(), que quebra ele nos 80 caracteres.

Para vetores com uma única linha ela funciona bem:

description <- paste("Esta é uma mensagem enorme, com mais de oitenta caracteres. Foi criada só para testar se o print irá se comportar adequadamente com esse tipo de descrição!")

cat(stringr::str_wrap(description))
#> Esta é uma mensagem enorme, com mais de oitenta caracteres. Foi criada só para
#> testar se o print irá se comportar adequadamente com esse tipo de descrição!

Created on 2021-07-21 by the reprex package (v2.0.0)

Entretanto, quando o vetor possui múltiplas linhas (indicadas por \n), a função stringr::str_wrap() ignora isso:

multi_line_description <- paste("Esta é uma mensagem enorme.",
                                "Com mais de oitenta caracteres.",
                                "E com várias linhas.",
                                paste("Foi criada só para testar se o print irá se comportar",
                                      "adequadamente com esse tipo de descrição!"),
                                sep = "\n")

cat(stringr::str_wrap(multi_line_description))
#> Esta é uma mensagem enorme. Com mais de oitenta caracteres. E com várias linhas.
#> Foi criada só para testar se o print irá se comportar adequadamente com esse
#> tipo de descrição!

Created on 2021-07-21 by the reprex package (v2.0.0)

Lendo a documentação entendi que a função stringr::str_wrap() chama a stringi::stri_wrap(), que substitui caracteres de nova linha (ex: \n) por espaço simples, o que causa o problema que estou enfrentado.

Conhecem alguma função que quebre o vetor em um determinado ponto E respeite as marcações de novas linhas (\n)?

Oi Bruna,

Não conheço nenhuma função que ignora o espaço mas, acho que vc pode fazer algo assim:

library(tidyverse)
multi_line_description <- paste("Esta é uma mensagem enorme.",
                                "Com mais de oitenta caracteres.",
                                "E com várias linhas.",
                                paste("Foi criada só para testar se o print irá se comportar",
                                      "adequadamente com esse tipo de descrição!"),
                                sep = "\n")

fun <- function(x) {
  stringr::str_split(multi_line_description, "\n") %>% 
    purrr::map_chr(~.x %>% stringr::str_wrap() %>% paste(collapse = "\n"))
}


cat(fun(multi_line_description))
#> Esta é uma mensagem enorme.
#> Com mais de oitenta caracteres.
#> E com várias linhas.
#> Foi criada só para testar se o print irá se comportar adequadamente com esse
#> tipo de descrição!

A ideia é separar a string nas quebras de linha que já estão, aplicar o wrap em cada pedaço e concatenar novamente.

3 curtidas