是否有一种简单的方法可以将字符向量中的字符串子列表替换为另一个字符串列表?
之类的东西gsub(c("a","b"),c("z","y"),a)
或
replace(a,c("a","b"),c("z","y"))
不幸的是,这两个都不起作用?
答案 0 :(得分:9)
答案 1 :(得分:1)
使用gsub
的简单循环就足够了,在大多数情况下可能会表现得很好:
a <- c("x","y")
b <- c("a","b")
vec <- "xy12"
mgsub <- function(pattern,replacement,x,...){
for (i in seq_along(pattern)){
x <- gsub(pattern = pattern[i],replacement = replacement[i],x,...)
}
x
}
> mgsub(a,b,vec)
[1] "ab12"
答案 2 :(得分:0)
我可以发誓在R中有一个递归的应用,并且有,但它做了一些非常不同的事情。
无论如何,这是一个:
#' Iteratively (recursively) apply a function to its own output
#' @param X a vector of first arguments to be passed in
#' @param FUN a function taking a changing (x) and an initial argument (init)
#' @param init an argument to be "worked on" by FUN with parameters x[1], x[2], etc.
#' @return the final value, of the same type as init
#' @example
#' vec <- "xy12"
#' replacementPairs <- list( c("x","a"), c("y","b") )
#' iapply( replacementPairs , FUN=function(repvec,x) {
#' gsub(repvec[1],repvec[2],x)
#' }, init=vec )
iapply <- function(X, FUN, init, ...) {
res <- init
for(x in X) {
res <- FUN(x, res, ...)
}
res
}
示例返回"ab12"
。