我有一些不同长度的大字符向量,我需要在较小的长度内进行处理。我目前在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个字母,但在我的真实文件中,这些字的长度各不相同。
非常感谢任何有关解决太空问题的建议。代码速度不是问题,但我确实感谢效率建议。
答案 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