这是我编写的一个函数,用于将长字符串分成不长于给定长度的行
strBreakInLines <- function(s, breakAt=90, prepend="") {
words <- unlist(strsplit(s, " "))
if (length(words)<2) return(s)
wordLen <- unlist(Map(nchar, words))
lineLen <- wordLen[1]
res <- words[1]
lineBreak <- paste("\n", prepend, sep="")
for (i in 2:length(words)) {
lineLen <- lineLen+wordLen[i]
if (lineLen < breakAt)
res <- paste(res, words[i], sep=" ")
else {
res <- paste(res, words[i], sep=lineBreak)
lineLen <- 0
}
}
return(res)
}
它适用于我遇到的问题;但我想知道我是否可以在这里学到一些东西。是否有更短或更有效的解决方案,特别是我可以摆脱 for 循环吗?
这个怎么样:
gsub('(.{1,90})(\\s|$)', '\\1\n', s)
它将字符串“s”分成最多90个字符的行(不包括换行符“\n”,但包括单词间空格),除非有一个单词本身超过90个字符,那么该单词本身将占据整个线。
顺便说一句,你的功能似乎坏了——你应该更换
lineLen <- 0
with
lineLen <- wordLen[i]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)