フルネームのセットからサフィックスのセットを削除したいと思います(サフィックスとフルネームの両方が文字ベクトルです)。for()
これは2つのループとで非常に簡単gsub()
ですが、より効率的なアプローチがあるはずです(コード行とクロックサイクルの両方で)。
私の最初の考えはでしたがrapply()
、それを機能させることができません。ループが最善のアプローチかもしれませfor()
んが、この時点で私はより良い理解に興味がありますrapply()
これがfor()
ループバージョンです。
names.full <- c("tom inc", "dick co", "harry incorp", "larry inc incorp", "curly", "moe")
suffix <- c("inc", "incorp", "incorporated", "co", "company")
suffix <- paste(" ", suffix, "$", sep = "")
# with loops
names.abbr <- names.full
for (k in seq(2)) {
for (i in seq(length(names.abbr))) {
for (j in seq(length(suffix))) {
names.abbr[i] <- gsub(suffix[j], "", names.abbr[i])
}
}
}
そして私の失敗したrapply()
バージョン。
# with rapply
inner.fun <- function(y, x) {
rapply(as.list(x), function(x) gsub(y, "", x), how = "replace")
}
names.abbr.fail <- unlist(rapply(as.list(suffix), inner.fun, x = names.full, how = replace))
これにより、次のエラーが発生します。
> names.abbr.fail <- unlist(rapply(as.list(suffix), inner.fun, x = names.full, how = replace))
Error in match.arg(how) : 'arg' must be NULL or a character vector