Justify text in R

后端 未结 2 606
醉话见心
醉话见心 2020-12-11 08:07

How do you justify text in R? By justify I mean that each line in a paragraph is exactly the same length (like when you justify in open office or excel). I have tried to f

2条回答
  •  攒了一身酷
    2020-12-11 08:29

    Well, if there is no built-in way this works well enough for my purposes. Thanks for the comments above about how to use html styling as well.

    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.
    

提交回复
热议问题