para - Justifica el texto en R
poligono en r (1)
¿Cómo justificas el texto en R? Por justificar quiero decir que cada línea en un párrafo tiene exactamente la misma longitud (como cuando justifica en una oficina abierta o sobresale). He intentado encontrar una opción con strwrap
y cat
pero no he tenido éxito.
## Get some sample text example from wikipedia api
library(httr)
library(xml2)
name <- "Invictus"
url <- URLencode(sprintf("https://en.wikisource.org/w/api.php?action=parse&prop=text&page=%s&format=json", name))
res <- read_html(content(GET(url))$parse$text[[1]])
string <- iconv(xml_text(xml_find_all(res, "//p"), trim=TRUE), "latin1", "ASCII", sub=" ")[1:2]
(string <- trimws(gsub(''//n|//s{3,}'', '' '', paste(string, collapse=" "))))
# [1] "Out of the night that covers me, Black as the pit from pole to pole, I thank whatever gods may be For my unconquerable soul. In the fell clutch of circumstance I have not winced nor cried aloud. Under the bludgeonings of chance My head is bloody, but unbow''d. Beyond this place of wrath and tears Looms but the Horror of the shade, And yet the menace of the years Finds and shall find me unafraid. It matters not how strait the gate, How charged with punishments the scroll, I am the master of my fate: I am the captain of my soul."
Algunos intentos de usar las funciones antes mencionadas
## Using these I can get left/right/center justified text but not
## justified like in other text editing programs or newspapers.
width <- 30
cat(paste(strwrap(string, width=width), collapse=''/n''))
## Or with cat
tokens <- strsplit(string, ''//s+'')[[1]] # tokenise to pass to cat
out <- capture.output(cat(tokens, fill=width, sep=" ")) # strings <= width chars
cat(paste(out, collapse=''/n''))
Bueno, si no hay una forma incorporada esto funciona lo suficientemente bien para mis propósitos. Gracias por los comentarios anteriores acerca de cómo usar el estilo html también.
justify <- function(string, width=getOption(''width''),
fill=c(''random'', ''right'', ''left'')) {
strs <- strwrap(string, width=width)
paste(fill_spaces(strs, width, match.arg(fill)), collapse="/n")
}
fill_spaces <- function(lines, width, fill) {
tokens <- strsplit(lines, ''//s+'')
res <- lapply(head(tokens, -1L), function(x) {
nspace <- length(x)-1L
extra <- width - sum(nchar(x)) - nspace
reps <- extra %/% nspace
extra <- extra %% nspace
times <- rep.int(if (reps>0) reps+1L else 1L, nspace)
if (extra > 0) {
if (fill==''right'') times[1:extra] <- times[1:extra]+1L
else if (fill==''left'')
times[(nspace-extra+1L):nspace] <- times[(nspace-extra+1L):nspace]+1L
else times[inds] <- times[(inds <- sample(nspace, extra))]+1L
}
spaces <- c('''', unlist(lapply(times, formatC, x='' '', digits=NULL)))
paste(c(rbind(spaces, x)), collapse='''')
})
c(res, paste(tail(tokens, 1L)[[1]], collapse = '' ''))
}
cat(justify(string, width=40))
# Out of the night that covers me, Black
# as the pit from pole to pole, I thank
# whatever gods may be For my
# unconquerable soul. In the fell clutch
# of circumstance I have not winced nor
# cried aloud. Under the bludgeonings of
# chance My head is bloody, but unbow''d.
# Beyond this place of wrath and tears
# Looms but the Horror of the shade, And
# yet the menace of the years Finds and
# shall find me unafraid. It matters not
# how strait the gate, How charged with
# punishments the scroll, I am the master
# of my fate: I am the captain of my
# soul.