2

我有一个映射功能如下,

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

现在我想应用它来比较两个不同大小的列表,比如myList1and 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 回答