[R] find the permutation function of a sorting

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Wed May 23 08:18:50 CEST 2018


Hello,

Like David said, what you are trying to do with sort() can be done with 
order() in a much easier way.

First, your code

x <- sort(c("bc","ac","dd"), index.return=TRUE)


Now, with function order()


i <- order(c("bc", "ac", "dd"))

y <- c("D","E", "F")[i]
y
#[1] "E" "D" "F"

# This will give you the inverse,
# just apply order() to the output of order(),
# function order() is its own inverse

y[ order(i) ]
#[1] "D" "E" "F"


Finally, compare the results and see that they are exactly the same.

identical(x$ix, i)
#[1] TRUE


Hope this helps,

Rui Barradas
On 5/23/2018 4:37 AM, John wrote:
>> sort(c("bc","ac","dd"), index.return=TRUE)
> $x
> [1] "ac" "bc" "dd"
> 
> $ix
> [1] 2 1 3
> 
> 
> We have the permutation, namely 1-->2, 2-->1, 3-->3.
> How can I apply the permutation function to a new set
> c("D","E", "F")?
> so that the result is
> c("E","D", "F").
> 
> 
> 
> 
> 2018-05-23 11:06 GMT+08:00 David Winsemius <dwinsemius using comcast.net>:
> 
>>
>>
>>> On May 22, 2018, at 10:57 PM, John <miaojpm using gmail.com> wrote:
>>>
>>> Thanks, David.
>>> I got the answer from the web.
>>> Is there any easy way to permute a set (e.g., a set of characters) by
>> the permutation it returns? Thanks,
>>>
>>>
>>>> x <- c(10,7,4,3,8,2)
>>>> sort(x, index.return=TRUE)
>>> $x
>>> [1]  2  3  4  7  8 10
>>>
>>> $ix
>>> [1] 6 4 3 2 5 1
>>>
>>
>> I don't understand what is being requested. The $ix value is the same as
>> the one returned `by order`.
>>
>> David.
>>
>>
>>> 2018-05-23 10:49 GMT+08:00 David Winsemius <dwinsemius using comcast.net>:
>>>
>>>
>>>> On May 22, 2018, at 10:06 PM, John <miaojpm using gmail.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>>    Is there any way to find the permutation function of the sorting and
>> to
>>>> apply the function (or its inverse) elsewhere?
>>>>
>>>>    For example, the following permutation function from the sorting in
>> the
>>>> matrix form is
>>>> c(1,2,3), c(2,1,3)
>>>>
>>>>> sort(c("bc","ac","dd"))
>>>> [1] "ac" "bc" "dd"
>>>>
>>>
>>> I think you are asking for the `order` function.
>>>
>>>>    I try to find it in the permutations/permute package, but I can't
>> find it
>>>>
>>>> John
>>>>
>>>>        [[alternative HTML version deleted]]
>>>
>>>
>>
>>
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>




More information about the R-help mailing list