将字符串包装成一定数量的行
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"
我有一组字符串如
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"