Song Calderone Zhang
Song Calderone Zhang

Reputation: 421

sorting a complex vector by imaginary part in R

roots <- polyroot(c(5, 4, 3, 2, 1))

I want to sort the roots by ascending order of the imaginary part. By default the sort function sorts it by the increasing order of the real part. I've read the document and I still do not know how to adjust the arguments or write the command. Can anybody help?

Upvotes: 1

Views: 685

Answers (2)

Aria
Aria

Reputation: 1

This also works:

> roots<-polyroot(c(5,4,3,2,1))
> roots[sort(Im(roots),index.return=T)$ix]
[1]  0.287815-1.416093i -1.287815-0.857897i
[3] -1.287815+0.857897i  0.287815+1.416093i

Sort the complex numbers by their imaginary parts and return their indexes, then use the indexes to refer the corresponding complex value in the sorted order.

Upvotes: 0

Zheyuan Li
Zheyuan Li

Reputation: 73315

Use Im function to extract the imaginary part and sort it.

roots <- polyroot(c(5, 4, 3, 2, 1))
#[1]  0.287815+1.416093i -1.287815+0.857897i -1.287815-0.857897i
#[4]  0.287815-1.416093i

roots[order(Im(roots))]
#[1]  0.287815-1.416093i -1.287815-0.857897i -1.287815+0.857897i
#[4]  0.287815+1.416093i

Upvotes: 5

Related Questions