在两个列表上应用多变量函数

时间:2014-10-24 01:28:03

标签: r apply tapply

我有一个映射函数,如下所示,

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

现在我想应用它来比较两个不同大小的列表,比如myList1myList2,这样对于myList1的每个元素,sub.func都会查找myList2中的匹配,如果是,则将替换为myList2的元素。这样myList2的所有元素都映射到了。如何在不使用循环的情况下实现此目的?可以使用任何应用函数的变体吗?

e.g。

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")

1 个答案:

答案 0 :(得分:0)

您可以使用此{/ p>的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"