[R] How do you use agrep inside a loop

Rui Barradas ruipbarradas at sapo.pt
Tue Dec 11 13:41:47 CET 2012


Hello,

Inline.
Em 11-12-2012 12:04, surekha nagabhushan escreveu:
> Rui,
>
> I have initialized it...doesn't seem to help...
>
> result_vector <- vector()

No! This must be just before the loop in 'j'

> result <- vector("list", (length(test1)-1))
> for(i in 1:(length(test1)-1))
> {
>    for(j in (i+1):length(test1))
>    {
>    result_vector[j-i] <- agrep(test1[i], test1[j], ignore.case = TRUE, value
> = TRUE, max.distance = 0.1)
>    }
>    result[[i]]<- result_vector
> }
>
> whenever agrep does not find a match it returns character(0), length zero,
> do you suppose it has anything to do with that?

Yes, without testing for length zero it throws an error, "replacement 
has length zero".

Hope this helps,

Rui Barradas
>
> Thank you.
>
> On Tue, Dec 11, 2012 at 5:13 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
>
>> Hello,
>>
>> See if this is it. You must reinitialize 'result_vector' just before the
>> loop that constructs it.
>>
>>
>> test1 <- c("Vashi", "Vashi,navi Mumbai", "Thane", "Vashi,new Mumbai",
>>
>>          "Thana", "Surekha", "Thane(w)", "surekhaN")
>>
>> result <- vector("list", (length(test1)-1))
>> for(i in 1:(length(test1)-1)){
>>      result_vector <- vector()
>>      for(j in (i+1):length(test1)){
>>          tmp <- agrep(test1[i], test1[j],
>>
>>                      ignore.case = TRUE, value = TRUE,
>>                      max.distance = 0.1)
>>          if(length(tmp) > 0) result_vector[j-i] <- tmp
>>      }
>>      result[[i]] <- result_vector
>> }
>> result
>>
>>
>>
>> Hope this helps,
>>
>> Rui Barradas
>> Em 11-12-2012 11:23, surekha nagabhushan escreveu:
>>
>>> Pascal,
>>>
>>> result_vector <- vector()
>>> result <- vector("list", (length(test1)-1))
>>> for(i in 1:(length(test1)-1))
>>> {
>>>     for(j in (i+1):length(test1))
>>>     {
>>>     result_vector[j-i] <- agrep(test1[i], test1[j], ignore.case = TRUE,
>>> value
>>> = TRUE, max.distance = 0.1)
>>>     }
>>>     result[[i]]<- result_vector
>>> }
>>>
>>> I'm not sure what the problem is with the dimension/length of result which
>>> is a list. But I just use the second line: result <- vector("list",
>>> (length(test1)-1))
>>>
>>> What am I missing?
>>>
>>> Thank you Rui Barradas.
>>>
>>> On Tue, Dec 11, 2012 at 4:25 PM, Rui Barradas <ruipbarradas at sapo.pt>
>>> wrote:
>>>
>>>   Hello,
>>>> And another error in line 2. It should be
>>>>
>>>> for(j in (i+1):length(test1))
>>>>
>>>>
>>>> Hope this helps,
>>>>
>>>> Rui Barradas
>>>>
>>>> Em 11-12-2012 07:54, Pascal Oettli escreveu:
>>>>
>>>>    Hi,
>>>>
>>>>> There is a mistake in the first line. It should be:
>>>>>
>>>>>> for(i in 1:(length(test1)-1))
>>>>>>
>>>>> Regards,
>>>>> Pascal
>>>>>
>>>>>
>>>>> Le 11/12/2012 16:01, surekha nagabhushan a écrit :
>>>>>
>>>>>   Hi all.
>>>>>> This is my first message at R-help...so I'm hoping I have some
>>>>>> beginner's
>>>>>> luck and get some good help for my problem!
>>>>>>
>>>>>> FYI I have just started using R recently so my knowledge of R is pretty
>>>>>> preliminary.
>>>>>>
>>>>>> Okay here is what I need help with - I need to know how to use agrep
>>>>>> in a
>>>>>>     for loop.
>>>>>>
>>>>>> I need to compare elements of a vector of names with other elements of
>>>>>> the
>>>>>> same vector.
>>>>>>
>>>>>> However if I use something like this:
>>>>>>
>>>>>> for(i in 1:length(test1)-1)
>>>>>> {
>>>>>>      for(j in i+1:length(test1))
>>>>>>      {
>>>>>>      result[[i]][j] <- agrep(test1[i], test1[j], ignore.case = TRUE,
>>>>>> value
>>>>>> =
>>>>>> TRUE, max.distance = 0.1)
>>>>>>      }
>>>>>>
>>>>>> }
>>>>>>
>>>>>> I get an error message saying - invalid 'pattern' argument. -* Error in
>>>>>> agrep(test1[i], test1[j], ignore.case = TRUE, value = TRUE,
>>>>>> max.distance
>>>>>> =
>>>>>> 0.1) : *
>>>>>> *  invalid 'pattern' argument*
>>>>>>
>>>>>> Test 1 being - c("Vashi", "Vashi,navi Mumbai", "Thane", "Vashi,new
>>>>>> Mumbai",
>>>>>> "Thana", "Surekha", "Thane(w)", "surekhaN")
>>>>>>
>>>>>> This is the first time I'm using agrep, I do not understand how it
>>>>>> works
>>>>>> fully...
>>>>>>
>>>>>> Kindly help...
>>>>>>
>>>>>> Thank you.
>>>>>>
>>>>>> Su.
>>>>>>
>>>>>>       [[alternative HTML version deleted]]
>>>>>>
>>>>>> ______________________________****________________
>>>>>> R-help at r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/****listinfo/r-help<https://stat.ethz.ch/mailman/**listinfo/r-help>
>>>>>> <https://stat.**ethz.ch/mailman/listinfo/r-**help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>>>> PLEASE do read the posting guide http://www.R-project.org/**
>>>>>> posting-guide.html <http://www.R-project.org/**posting-guide.html<http://www.R-project.org/posting-guide.html>
>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>
>>>>>>
>>>>>>   ______________________________****________________
>>>>> R-help at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/****listinfo/r-help<https://stat.ethz.ch/mailman/**listinfo/r-help>
>>>>> <https://stat.**ethz.ch/mailman/listinfo/r-**help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>>> PLEASE do read the posting guide http://www.R-project.org/**
>>>>> posting-guide.html <http://www.R-project.org/**posting-guide.html<http://www.R-project.org/posting-guide.html>
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>
>>>>>




More information about the R-help mailing list