如何使用循环逐元素地比较2个向量

时间:2013-10-07 14:38:53

标签: r string-matching

我试图以这种方式比较来自2个向量的元素,但我得到的结果只是第一个元素。

      >ex1<-c('gdgdg','dd','fffff','ssdsds')

      fuct1<-function(x){
        for(i in 1:length(x)){
          ex2<-c('xxxx','ddd','ddd','ddd','dddd')
          match<-agrep(x[i],ex2[i],value='true')
          return(match[i])
         }
      }

      >fuct1(ex1)

通过这个例子,我想比较'gdgdg'和'xxxx'(每个矢量的第一个元素)'dd'和'ddd'(第二个)等等......结果我想要一些东西as(NA,ddd,NA,NA)。我的代码的结果只是NA。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

您想在此处使用sapply

ex2<-c('xxxx','ddd','ddd','ddd','dddd')
sapply(ex1, function(x) agrep(x, ex2))

$gdgdg
integer(0)

$dd
[1] 2 3 4 5

$fffff
integer(0)

$ssdsds
integer(0)

答案 1 :(得分:1)

认为您正在寻找mapply

  mapply(agrep,ex1,ex2,value=TRUE)

但这假设您的2个向量具有相同的长度。

答案 2 :(得分:0)

也许这就是你想要的:

ex1<-c('gdgdg','ddd','fffff','ssdsds')
match<-"TROLOLOL"
fuct1<-function(x){
for(i in 1:length(x)){
ex2<-c('xxxx','ddd','ddd','dddd')
    match<-c(match,agrep(x[i],ex2[i],value=TRUE))
  }
 return(match)
}
fuct1(ex1)[-1]
[1] "ddd"

如果您想要NAs,我可以完成此操作:)