Steph Locke
Steph Locke

Reputation: 6146

Using non-ASCII characters inside functions for packages

I'm trying to write a function equivalent to scales::dollar that adds a pound (£) symbol to the beginning of a figure. Since the scales code is so robust, I've used it as a framework and simply replaced the $ for the £.

A stripped-down function example:

pounds<-function(x) paste0("£",x)

When I run a CHECK I get the following:

Found the following file with non-ASCII characters:
  pounds.R
Portable packages must use only ASCII characters in their R code,
except perhaps in comments.
Use \uxxxx escapes for other characters.

Looking through the Writing R extensions guide it doesn't give a lot of help (IMO) on how to resolve this issue. It mentions the \uxxxx and says it refers to Unicode characters.

Looking up unicode characters yields me the code &#163 but the guidance I can find for \uxxxx is minimal and relates to Java on W3schools.

My question is thus:

How do you implement the usage of non-unicode characters in R functions using the \uxxxx escapes and how does the usage affect the display of such characters after the function has been used?

Upvotes: 21

Views: 3651

Answers (3)

Karsten W.
Karsten W.

Reputation: 18490

For the \uxxxx escapes, you need to know the hexadecimal number of your character. You can determine it using charToRaw:

sprintf("%X", as.integer(charToRaw("£")))
[1] "A3"

Now you can use this to specify your non-ascii character. Both \u00A3 and £ represent the same character.

Another option is to use stringi::stri_escape_unicode:

library(stringi)
stringi::stri_escape_unicode("➛")
# "\\u279b"

This informs you that "\u279b" represents the character "➛".

Upvotes: 30

Jot eN
Jot eN

Reputation: 6406

The stringi package can be useful is these situations:

library(stringi)

stri_escape_unicode("£")
#> [1] "\\u00a3"

Upvotes: 7

bartektartanus
bartektartanus

Reputation: 16080

Try this:

pounds<-function(x) paste0("\u00A3",x)

Upvotes: 11

Related Questions