我编写了一个函数,将单词分成单个字母,然后创建一个2变量数据框,其中包含这些字母及其在原始单词中的位置,以百分比表示。看起来像这样:
pozycje.literek <- function(slowo){
literki <- unlist(strsplit(slowo,""))
liczby <- seq(0,length(literki)-1) / (length(literki)-1)
pozycje <- data_frame(literki, liczby)
return(pozycje)
}
该功能可以满足我的需求,但是速度非常慢。下面的示例包含1万个元素,花费了52秒(只是第二个循环,没有生成随机的示例字符矢量)。我正在处理的向量超过50万。
wektor <- vector()
for(i in 1:10000){
wektor[i] <- paste0(sample(letters[1:24], round(runif(1,3,10),0)),collapse = "")
}
tabelka <- data.frame()
system.time(for(i in wektor){
tabelka <- rbind(tabelka, pozycje.literek(i)) #tu powstaje baza dla danego kraju i potem już jest kod wspolny bo zamieniam na 'tabelka'
})
有什么想法可以加快速度吗?我想不出apply
家族的任何用途,但我相信可能会有一个。还是我的功能可以用完全不同的方式完成?
答案 0 :(得分:3)
literki <- strsplit(wektor, "")
x <- lengths(literki)
liczby <- lapply(x, function(x) seq(0, x-1)/(x-1))
pozycje <- data_frame(unlist(literki), unlist(liczby))