2

次のようなマッピング関数があります。

sub.func <- function(x,y){
  if(agrepl(x,y)){
    return(x)
  }
  else{
    return(y)
  }
}

これを適用して、サイズの異なる 2 つのリスト、たとえばmyList1とを比較myList2して、 の各要素に対してmyList1sub.func一致を探し、myList2そうであれば の要素に置き換えmyList2ます。のすべての要素myList2がマップされるようにします。ループを使用せずにこれを達成するにはどうすればよいですか? 適用関数の任意のバリアントを使用できますか?

例えば

myList1 <- c("a b", "c d", "e f")

myList2 <- c("1", "a b d", "d", "e f g h", "2 3 a c d", "c g")

必要な出力は myList2 と同じ長さですが、可能な限り myList1 にマップされます

output <- c("1", "a b", "d", "e f", "c d", "c g")
4

1 に答える 1

0

Reduceこれには関数を使用できます

myList1 <- c("a b", "c d", "e f")
myList2 <- c("1", "a b d", "d", "e f g h", "2 3 a c d", "c g")

Reduce(function(vals, find) {vals[grep(find, vals)]<-find; vals}, myList1, myList2)
# [1] "1"   "a b" "d"   "e f" "c d" "c g"
于 2014-10-24T01:58:04.827 に答える