Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
558 views
in Technique[技术] by (71.8m points)

r - How to sort a list by byte-order for AWS-Calls

Having a look at http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html

The following Name-Value Pairs:

Service=AWSECommerceService
Version=2011-08-01
AssociateTag=PutYourAssociateTagHere
Operation=ItemSearch
SearchIndex=Books
Keywords=harry+potter
Timestamp=2015-09-26T14:10:56.000Z
AWSAccessKeyId=123

The name-value pairs have been sorted according to byte-order

Should result in

AWSAccessKeyId=123
AssociateTag=PutYourAssociateTagHere
Keywords=harry%20potter
Operation=ItemSearch
SearchIndex=Books
Service=AWSECommerceService
Timestamp=2015-09-26T14%3A10%3A56.000Z
Version=2011-08-01

How to achieve this in R?

As far as i can tell they are sorted by their as.numeric(charToRaw(name)) values. If the first value is equal then they are sorted by the second one, then the third and so on.

Question: How to do this in R?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
# Name-Value-Pairs
nvp <- list(                                
"Service"="AWSECommerceService",
"Version"="2011-08-01",
"AssociateTag"="PutYourAssociateTagHere",
"Operation"="ItemSearch",
"SearchIndex"="Books",
"Keywords"="harry potter",
"Timestamp"="2015-09-26T14:10:56.000Z",
"AWSAccessKeyId"="123"
)

Get Bytes:

bytes <- function(chr){
  as.data.frame(t(as.numeric(charToRaw(chr))))
}

Calculate Bytes, and rbind the values

b <- lapply(names(nvp), bytes)
b <- data.table::rbindlist(b, fill=TRUE) # other than base::rbind, this fills by NA

Order the names by first column, then by second, by third, ... and so on

names(nvp)[do.call(order, as.list(b))]

[1] "AWSAccessKeyId" "AssociateTag"   "Keywords"       "Operation"      "SearchIndex"   
[6] "Service"        "Timestamp"      "Version"   

So finally nvp[do.call(order, as.list(b))] returns in the properly sorted list


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.9k users

...