1

文字ベクトル内の文字列のサブリストを別の文字列リストに置き換える簡単な方法はありますか?何かのようなもの

gsub(c("a","b"),c("z","y"),a)

また

replace(a,c("a","b"),c("z","y"))

どちらも残念ながら機能しませんか?

4

3 に答える 3

9

単一の文字を置き換えるだけの場合chartrは、探しているものかもしれません:

> chartr( "ab", "zy", "abababa")
[1] "zyzyzyz"

この質問も興味深いかもしれません。

于 2012-12-03T15:17:52.870 に答える
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"
于 2012-12-03T15:10:01.617 に答える
0

Rに再帰的な適用があることを誓うことができましたが、それは非常に異なることをします。

とにかく、ここに1つあります:

#' 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"

于 2012-12-03T16:52:07.397 に答える