如何找到R字符向量中N个字符后的下一个空格?

时间:2018-04-13 20:59:48

标签: r string loops vector char

我有一些不同长度的大字符向量,我需要在较小的长度内进行处理。我目前在lapply()中使用substr()来拆分成一个列表,其中每个列表项的长度都是500K个字符。

但是,我希望在大约500K字符之后拆分下一个空格,以避免将一个字剁成两半。不知道如何修改我到目前为止所提出的内容。我目前的代码类似:

#Pretend 'text' is my list of words
chars = c(letters, " ", ".")
text<-paste0(sample(chars, 3000000, replace=TRUE), collapse="")

#split to list of smaller vectors
text_segments<-laply(seq(1,nchar(text),500000), function(i) substr(text, i, i+499999))

#do something with each
for(i in unique(text_segments)){
parsedtxt <- spacy_parse(i)
...
}

上面例子中的每个假字都是3个字母,但在我的真实文件中,这些字的长度各不相同。

非常感谢任何有关解决太空问题的建议。代码速度不是问题,但我确实感谢效率建议。

1 个答案:

答案 0 :(得分:0)

也许您可以从下面的代码中获取灵感并使其适应您的数据集 首先,我将补充一些数据。

set.seed(1)    # Make the results reproducible
y1 <- paste(sample(c(letters, " "), 1e3, TRUE), collapse = "")
y2 <- paste(sample(c(letters, " "), 1e3, TRUE), collapse = "")
str_list <- list(y1, y2)

现在,函数fun完成了这项工作。它使用gregexpr来获取空格的位置,然后返回从输入字符串的beginnig到找到的第一个空格的所有内容。

fun <- function(x, threshold){
    blanks <- gregexpr(" +", x)[[1]]
    substr(x, 1, blanks[which(blanks > threshold)[1]] - 1)
}

thresh <- 100

sub <- lapply(str_list, fun, thresh)
lapply(sub, nchar)
#[[1]]
#[1] 103
#
#[[2]]
#[1] 154