У меня есть возможность создать матрицу подсчета для символов в заданном векторе слов и затем построить ее в аккуратном визуальном элементе на основе позиции, взвешенной по количеству. Тем не менее, время выполнения жестоко медленно для больших наборов, в основном потому, что у меня довольно новичок, который работает с O (n ^ 2) из-за вложенных циклов go.
По мере увеличения слов становится дорогим вычислением, вызывающим узкое место в этой функции. Я все еще новичок в R, , но кто-нибудь может предложить оптимизацию где-нибудь в al go или указать мне на векторизованную функцию, уже оптимизированную для чего-то вроде этого ? Я пытаюсь остаться в базе R для минимизации зависимостей, но не сверхкритически.
Ради репрезентации, вот небольшая выборка слов (длина (слово) == 5):
mtx <- matrix(0, byrow=TRUE, nrow=26, ncol=5)
rownames(mtx) <- letters
colnames(mtx) <- c("01", "02", "03", "04", "05")
word_set <- c("clear", "laugh", "cigar", "honda", "tulip", "asset")
for (word in 1:length(word_set)) {
for (letter in 1:nchar(word_set[word])) {
chars_in_word <- strsplit(word_set[word], "")[[1]] # Split word into chars
letter_position <- colnames(mtx)[letter] # Define rowname as letter_position
letter_match <- rownames(mtx)[match(chars_in_word[letter], rownames(mtx))] # Find which row the char is equal to
mtx[letter_match, letter_position] <- mtx[letter_match, letter_position] + 1.0000 # Increment tally
}
}
Мой подход состоит в том, чтобы
- Разделить каждое слово на отдельные символы
- Сопоставить символ с одной из строк (помеченных a: z), а затем
- Увеличение на 1 в согласованной позиции (имена)