> 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 at comcast.net>:> > > > On May 22, 2018, at 10:57 PM, John <miaojpm at 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 at comcast.net>: > > > > > > > On May 22, 2018, at 10:06 PM, John <miaojpm at 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]]
> On May 22, 2018, at 11:37 PM, John <miaojpm at gmail.com> 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").So you want:> x <- sort(c("bc","ac","dd"), index.return=TRUE) > x$x [1] "ac" "bc" "dd" $ix [1] 2 1 3> c("D","E", "F")[ x$ix ][1] "E" "D" "F"> > 2018-05-23 11:06 GMT+08:00 David Winsemius <dwinsemius at comcast.net>: > > > > On May 22, 2018, at 10:57 PM, John <miaojpm at 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 at comcast.net>: > > > > > > > On May 22, 2018, at 10:06 PM, John <miaojpm at 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]] > > > > > >
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 at comcast.net>: > >> >> >>> On May 22, 2018, at 10:57 PM, John <miaojpm at 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 at comcast.net>: >>> >>> >>>> On May 22, 2018, at 10:06 PM, John <miaojpm at 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 at 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. >
Thanks, David, Rui and Jeff!!! The function order works much better. I should have used an example where the permutation and its inverse are not identical:> i <- order(c("B", "C", "A")) > i[1] 3 1 2> c("D","E", "F")[i][1] "F" "D" "E"> c("D","E", "F")[order(i)][1] "E" "F" "D" 2018-05-23 14:18 GMT+08:00 Rui Barradas <ruipbarradas at sapo.pt>:> 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 at comcast.net>: >> >> >>> >>> On May 22, 2018, at 10:57 PM, John <miaojpm at 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 at comcast.net>: >>>> >>>> >>>> On May 22, 2018, at 10:06 PM, John <miaojpm at 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 at 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/posti >> ng-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >>[[alternative HTML version deleted]]