我已成功切换为循环之前sapply循环 ,我知道一个事实(system.time()),他们的速度更快。
但我的心中仍然工作在for循环的方式...
请帮我转换for循环的情况:
names.list <- c("Anna", "Ana", "Albert", "Albort", "Rob", "Robb", "Tommy", "Tommie")
misspell.list <- c("Anna", "Albort", "Robb", "Tommie")
fix.list <- c("Ana", "Albert", "Rob", "Tommy")
for(i in 1:length(fix.list)) {
names.list[which(names.list == misspell.list[i])] <- fix.list[i]
}
names.list
到sapply()
到目前为止,我有:
sapply(seq_along(fix.list), function(x)
names.list[which(names.list == misspell.list[x])] <- fix.list[x]
)
但它只返回我的原始载体。
谢谢!
编辑1:
的misspell.list和fix.list通过adist自动创建()波纹管和原始names.list具有665层的元件。 我的()溶液返回length(unique(names.list))
= 653种元素
# will do another sapply() substitution here soon
for(i in 1:(length(names.list)-1)) {
distancias[i] <- adist(names.list[i], names.list[i+1])
}
# fix list
misspell.list <- names.list[which(distancias < 2)]
fix.list <- names.list[which(distancias < 2) +1]
编辑2:谢谢你,现在我已经是sapply霸主 ,我在这里只是为了显示我的其他换sapply与adist使用替代()
nomes <- sort(unique(names.list))
distancias <- rep(10, length(nomes))
#adist() for finding misspelling
sapply(seq_along(nomes),
function(x) {
if(x<length(nomes)) {
distancias[x] <<- adist(nomes[x], nomes[x+1])
}
}
)
# fix list
misspell.list <- names.list[which(distancias < 2)]
fix.list <- names.list[which(distancias < 2) +1]
另一部分你已经重新认识,谢谢!