У меня есть список слов и список шаблонов общих символов, найденных в словах. Сценарий работает, просматривая список слов, а затем проверяет, какой шаблон символов находится в слове, и, наконец, отображает результаты в таблице.
Готовый стол должен выглядеть так:
word CharPatLen charpat01 charpat02 charpat03 charpat04
father 4 f a th er
there 3 th er e
after 4 a f r er
Вместо этого я получаю таблицу ниже, и в поле charpat03 для слова "там" все идет не так, как надо. 'F' здесь должно быть вместо 'e', а следующая строка пуста.
word CharPatLen charpat01 charpat02 charpat03 charpat04
father 4 f a th er
there 3 th er f
after 4
Я также получаю следующее предупреждающее сообщение, которое я попытался исправить с помощью поисков в Google, но безуспешно
'Warning message:
In as.numeric(paste(as.numeric(charIndexStart), charIndexEnd, sep = "")) :
NAs introduced by coercion'
Помощь! Я не уверен, что происходит со сценарием.
Спасибо, что нашли время, чтобы просмотреть мое сообщение.
##################################################
# This script loops through a word list then break the word into character (char)
# pattern found character pattern list
#
# e.g
#using the word list ( father, there, after)
#using the char pattern list (th,er,f, a, e,t)
#
# it should return the following
#
# word CharPatLen charpat01 charpat02 charpat03 charpat04
# father 4 f a th er
# there 3 th er e
# after 4 a f r er
#####################################################
word <- c("father", "there", "after")
CharPatLen <- c(0, 0, 0)
charpat01 <- c("", "", "" )
charpat02 <- c("", "", "" )
charpat03 <- c("", "", "" )
charpat04 <- c("", "", "" )
charpat05 <- c("", "", "" )
wordList <- data.frame(word, CharPatLen, charpat01,charpat02,charpat03,charpat04,charpat05,stringsAsFactors = F)
textPat <- c("th", "er", "f","a","e","t")
frequency <- c(0,0,0,0,0,0)
textPattern <- data.frame(textPat,frequency, stringsAsFactors = F)
#######################################
# 01 loop through word list
#######################################
for (text in wordList$word) {#4loop01
# track what parts of the word a found char pattern
charSelectionTracker <- rep(1, times=nchar(text))
#found char patterns from word, order/range and the char pattern
FoundcharPatternholder <- data.frame(order= integer(),charPattern = character())
#########################################
# 02 loop through character patterns list
#########################################
for (pattern in textPattern$textPat) { #4loop02
if(sum(charSelectionTracker)== 0)
{#charSelect
#reorder patterns
rank <- order(FoundcharPatternholder$order)
FoundcharPatternholder<- FoundcharPatternholder[rank,]
wordList[which(wordList$word == text),"CharPatLen"] = nrow(FoundcharPatternholder)
for (patPao in 1:nrow(FoundcharPatternholder))
{
wordList[which(wordList$word == text),patPao+2] = as.character(FoundcharPatternholder[patPao,2])
}
break
}#charSelect
#find all char pattern in word
patFoundAt <- unlist(gregexpr (pattern,text)[[1]])
#########################################
# 03 check that each pattern within a word is valid and not used in an other char pattern
#########################################
for (charIndexStart in patFoundAt)
{#4loop03
charIndexEnd = charIndexStart + nchar(pattern)-1
if( sum(charSelectionTracker[charIndexStart:charIndexEnd]) == nchar(pattern) & sum(charSelectionTracker)> 0)
{#PatExtract
#track what letters have been used by character pattern
charSelectionTracker[charIndexStart:charIndexEnd]=0
#order/index in pattern
patIndex <- as.numeric(paste(as.numeric(charIndexStart),charIndexEnd, sep = ''))
innerPatternholder <- data.frame(order= patIndex,charPattern = pattern)
FoundcharPatternholder <- rbind(FoundcharPatternholder, innerPatternholder)
}#PatExtract
}#4loop03
} #4loop02
}#4loop01