我想創建一個模型,我多次復制一個句子,每次都引入隨機錯誤。句子的重復項也會重復。所以,在第一周期,我從“example_sentence”開始。在第二個周期中,我有該句子的兩個副本。在第三周期中,我有 4 個該句子的副本。我想用 20k 個句子做 25 個周期。我寫的代碼運行得太慢了,我想知道是否有辦法讓我的嵌套 for 回圈更有效?這是代碼中最慢的部分:
alphabet <- c("a","b","d","j")
modr1 <- "sentencetoduplicate"
errorRate <- c()
errorRate <- append(errorRate, rep(1,1))
errorRate <- append(errorRate, rep(0,999))
duplicate <- c(modr1)
for (q in 1:25) {
collect <- c()
for (z in seq_along(duplicate)) {
modr1 = duplicate[z]
compile1 <- c()
for (k in 1:nchar(modr1)) {
error <- sample(errorRate, 1, replace = TRUE)
if (error == 1) {
compile1 <- append(compile1, sub(substring(modr1,k,k),sample(alphabet,1,replace=TRUE),substring(modr1,k,k)))
} else {
compile1 <- append(compile1, substring(modr1,k,k))
}
}
modr1 <- paste(compile1, collapse='')
collect <- append(collect, modr1)
}
duplicate <- append(duplicate, collect)
}
uj5u.com熱心網友回復:
這是一種更快的回圈方法,但我認為將其應用于 20K 句子的問題仍然存在!
f <- function(let, alphabet = c("a","b","c","d","j"),error_rate=1/1000) {
lenlet=length(let)
let = unlist(let)
k <- rbinom(length(let),1,prob = error_rate)
let[k==1] <- sample(alphabet,size = sum(k==1), replace=T)
return(as.list(as.data.frame(matrix(let, ncol=lenlet))))
}
modr1 <- "sentencetoduplicate"
k <- data.table(list(strsplit(modr1,"")[[1]]))
for(q in 1:25) {
k[, V1:=list(f(V1))]
k <- k[rep(1:nrow(k),2)]
}
更新了稍快的版本!(注意這不再是by=1:nrow(k))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/439185.html
