Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在长字符串中插入换行符--换行_String_R - Fatal编程技术网

String 在长字符串中插入换行符--换行

String 在长字符串中插入换行符--换行,string,r,String,R,下面是我编写的一个函数,用于将长字符串拆分为不超过给定长度的行 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 <- wo

下面是我编写的一个函数,用于将长字符串拆分为不超过给定长度的行

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)
}
strBreakInLines这个怎么样:

gsub('(.{1,90})(\\s|$)', '\\1\n', s)
它将字符串“s”分成最多90个字符的行(不包括换行符“\n”,但包括字间空格),除非有一个单词本身超过90个字符,否则该单词本身将占据整行

顺便说一句,你的功能好像坏了——你应该更换

lineLen <- 0

lineLen您可以查看R本身的
write.dcf()
函数;它还使用了一个循环,所以在这里没有什么好羞愧的


第一个目标是把它做好——见钱伯斯(2008)

为了完整起见,Karsten W.的注释指向strwrap
,这是最容易记住的函数:

strwrap("Lorem ipsum... you know the routine", width=10)
为了精确匹配问题中提出的解决方案,必须在之后粘贴字符串:

paste(strwrap(s,90), collapse="\n")

这篇文章是故意在社区维基上发表的,因为找到这个函数的荣誉不是我的。

为了进一步完善,这里有:

  • stringi::stri_wrap
  • stringr::str_wrap
    (它最终调用
    stringi::stri_wrap

stringi
版本将更好地处理字符集(它构建在ICU库上)它是用C/C++编写的,因此它最终会比
base::strwrap
更快。它还通过
str
参数进行了矢量化。

很好的解决方案!我觉得我需要学习正则表达式,谢谢你指出我函数中的错误。你能添加一个注释来解释每个部分具体做什么吗?检查write.dcf(然后是格式化DL)提出了strwrap函数,它与我的函数试图做的完全一样。完美——我知道有东西,但我没有立即找到它。我也曾经为蔓越莓需要过这个函数……如果你需要它作为一个函数,你也可以在
sapply
中修改
strwrap
以下用户定义公式:
tri默尔
paste(strwrap(s,90), collapse="\n")