|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
which.max2()Hello,
which.max() only returns one index value, the one for the maximum value. If I want the two index values for the two largest values, is this a decent solution, or is there a nicer/better R'ish way? max2 <-function(v) { m=which.max(v) v[m] = -v[m] m2=which.max(v) result=c(m, m2) result } Seems to work ok. Thanks, Esmail ______________________________________________ R-help@... mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
|
|
Re: which.max2()try this:
v <- rnorm(10) v order(v, decreasing = TRUE)[1:2] I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Esmail Bonakdarian" <esmail.js@...> To: <r-help@...> Sent: Friday, May 09, 2008 3:07 PM Subject: [R] which.max2() > Hello, > > which.max() only returns one index value, the one for the > maximum value. If I want the two index values for the two > largest values, is this a decent solution, or is there a > nicer/better R'ish way? > > max2 <-function(v) > { > m=which.max(v) > v[m] = -v[m] > m2=which.max(v) > result=c(m, m2) > result > } > > Seems to work ok. > > Thanks, > Esmail > > ______________________________________________ > R-help@... mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm ______________________________________________ R-help@... mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
|
|
Re: which.max2()on 05/09/2008 08:07 AM Esmail Bonakdarian wrote:
> Hello, > > which.max() only returns one index value, the one for the > maximum value. If I want the two index values for the two > largest values, is this a decent solution, or is there a > nicer/better R'ish way? > > max2 <-function(v) > { > m=which.max(v) > v[m] = -v[m] > m2=which.max(v) > result=c(m, m2) > result > } > > Seems to work ok. > > Thanks, > Esmail I might be tempted to take a more generic approach, where one can provide an argument to the function to indicate that I want the 'top x' maximum values and to give the user the option of returning the indices or the values themselves. Perhaps: which.max2 <- function(x, top = 1, values = FALSE) { if (values) rev(sort(x))[1:top] else order(x, decreasing = TRUE)[1:top] } set.seed(1) Vec <- rnorm(10) > Vec [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 -0.8204684 [7] 0.4874291 0.7383247 0.5757814 -0.3053884 > which.max2(Vec, 2) [1] 4 8 > which.max2(Vec, 2, values = TRUE) [1] 1.5952808 0.7383247 HTH, Marc Schwartz ______________________________________________ R-help@... mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
|
|
Re: which.max2()Dimitris Rizopoulos wrote:
> try this: > > v <- rnorm(10) > v > order(v, decreasing = TRUE)[1:2] Wow .. that is slick! First I thought, wait .. I don't want to reorder the elements, but this doesn't - it just returns the index values in order. I don't really get that from reading the documentation, it's probably there, but not that clear to me. Thanks for showing me something more "R'ish". Esmail ______________________________________________ R-help@... mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
|
|
Re: which.max2()Marc Schwartz wrote:
> > I might be tempted to take a more generic approach, where one can > provide an argument to the function to indicate that I want the 'top x' > maximum values and to give the user the option of returning the indices > or the values themselves. > > Perhaps: > > which.max2 <- function(x, top = 1, values = FALSE) > { > if (values) > rev(sort(x))[1:top] > else > order(x, decreasing = TRUE)[1:top] > } Very cool too! .. Thanks Marc. Again, I did not get this from the order documentation (ie that it manipulate index values rather than the values themselves). Great to see examples. Best, Esmail ______________________________________________ R-help@... mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
| Free Forum Powered by Nabble | Forum Help |