将字符串包装成一定数量的行

Wrapping a string into a set number of lines

我有一组字符串如

x <- c("xxx", "xxx xxx", "xxx xxxx xxx", "xxx xxxx xxx xxxxxx")

我想把每一个都换行,这样它们就落在两行上,在有空格的地方换行,大致在字符串的中间,即输出如

"xxx" "xxx\nxxx" "xxx\nxxxx xxx" "xxx xxxx\nxxx xxxxxx"

我认为 strwrap 会起作用,但我不知道如何设置宽度才能避免输出偏离第三行

我不知道有任何内置函数可以执行此操作,但您可以找到“最中间的”space 并将其替换为具有如下函数的新行:

two_line_wrap <- function(x) {
  mapply(function(spaces, length, string) {
    if(all(spaces==-1)) return(string);
    breakp <- spaces[which.min(abs(spaces-length/2))]
    substr(string, breakp, breakp) <- "\n"
    string
  }, gregexpr(" ", x), nchar(x), x)
}

two_line_wrap(x)
# [1] "xxx"                  "xxx\nxxx"            
# [3] "xxx\nxxxx xxx"        "xxx xxxx\nxxx xxxxxx"