[R] Equivalents of Matlab's 'find' and 'end'

Tony Plate tplate at blackmesacapital.com
Thu Oct 7 16:37:17 CEST 2004


At Thursday 08:10 AM 10/7/2004, Bryan L. Brown wrote:
>Sorry if these questions have been asked recently--I'm new to this list.
>
>I'm primarily a Matlab user who is attempting to learn R and I'm searching 
>for possible equivalents of commands that I found very handy in 
>Matlab.  So that I don't seem ungrateful to those who may answer, I HAVE 
>determined ways to carry out these processes in 'brute force' sorts of 
>ways in R code, but they lack the elegance and simplicity of the Matlab 
>commands.  Also, if you know that no such commands exist, that bit of 
>knowledge would be helpful to know so that I don't continue fruitless 
>searches.
>
>The first is Matlab's 'find' command.
>This is one of the most useful commands in Matab.  Basically, if X is the 
>vector
>
>X=[3, 2, 1, 1, 2, 3]
>
>the command
>
>'find(X==1)'
>
>would return the vector [3, 4] which would indicate that the vector X had 
>the value of 1 at the 3 and 4 positions.  This was an extremely useful 
>command for subsetting in Matlab.  The closest thing I've found in R has 
>been 'match' but match only returns the first value as opposed to the 
>position of all matching values.

For this specific case, you can use which().  Also note that sometimes it 
can be useful to use match() with the arguments swapped, which can return 
you the positions of all matching values.  Also, the operator %in% can be 
useful:

 > X <- c(3, 2, 1, 1, 2, 3)
 > which(X==1)
[1] 3 4
 > match(1, X)
[1] 3
 > match(X, 1)
[1] NA NA  1  1 NA NA
 > which(!is.na(match(X, 1)))
[1] 3 4
 > which(X %in% 1)
[1] 3 4
 >


>The second Matlab command that I'd like to find an R equivalent for is 
>'end'.  'end' is just a simple little command that indicates the end of a 
>row/column.  It is incredibly handy when used to subset matrices like
>
>Y = X(2:end)
>
>and produces Y=[2, 1, 1, 2, 3] if the X is the same as in the previous 
>example.  This cutsie little command was extremely useful for composing 
>programs that were flexible and could use input matrices of any size 
>without modifying the code.  I realize that you can accomplish the same by 
>Y <- X[2:length(X)] in R, but this method is ungainly, particularly when 
>subsetting matrices rather than vectors.

Yep, that is a handy feature, and I often wish for something like it, but 
in my 10 years of using R/S-PLUS I've not come across anything better than 
using length(X) (or nrow(X)/ncol(X)) for the general case.  (But I do 
sometimes still discover useful things that I didn't know about.)

For your specific case of
 > Y = X(2:end)
in R/S-PLUS you can do:
 > Y = X[-1]

>If anyone has advice, I'd be grateful,
>
>Bryan L. Brown
>Integrative Biology
>University of Texas at Austin
>Austin, TX 78712
>512-965-0678
>stonefly at mail.utexas.edu
>         [[alternative HTML version deleted]]
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list