2013-10-07 175 views
1

我試圖用這種方法比較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'and‘DDD’(第二的)等等...,作爲結果我會喜歡有(NA,DDD,NA,NA)。我的代碼的結果就是NA。 感謝您的幫助。

+0

+1。我認爲你需要在大寫和無引號的情況下寫TRUE,以備將來參考。 – Frank

+0

爲什麼你在'for循環中'指定一個常量值 - 是故意的,是一個錯字? –

回答

1

認爲你可以完成這個您正在尋找mapply

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

但是這假設你的2個向量具有相同的長度。

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) 
+2

這裏不需要匿名函數。可以簡化爲'sapply(ex1,agrep,ex2)' –

+0

在你的答案中,你將第一個中的每個值與第二個向量中的所有值進行比較,但是我想用這種方式比較:ex1 [1]和ex2 [1] ,ex1 [2]和ex2 [2],ex1 [3]和ex2 [3] ... – user222914

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" 

,如果你想的NA我猜:)