我想從一組全名(後綴和全名都是字符向量)中刪除一組後綴。使用兩個for()
循環和gsub()
這很容易,但似乎應該有一個更有效的方法(無論是在代碼行還是時鐘循環中)。使用rapply從字符名稱向量中的字符向量
我的第一個想法是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
錯誤是我認爲,因爲你沒有在你的'inner.fun'中引用「replace」。不知道如何用'rapply'做到這一點,但我相信有比循環更好的方法... – joran