Is there a string formatting operator in R similar to Python's %?

Conner M. picture Conner M. · Sep 7, 2017 · Viewed 34.2k times · Source

I have a url that I need to send a request to using date variables. The https address takes the date variables. I'd like to assign the dates to the address string using something like the formatting operator % in Python. Does R have a similar operator or do I need to rely on paste()?

# Example variables
year = "2008"
mnth = "1"
day = "31"

This is what I would do in Python 2.7:

url = "https:.../KBOS/%s/%s/%s/DailyHistory.html" % (year, mnth, day)

Or using .format() in 3.+.

The only I'd know to do in R seems verbose and relies on paste:

url_start = "https:.../KBOS/"
url_end = "/DailyHistory.html"
paste(url_start, year, "/", mnth, "/", day, url_end) 

Is there a better way of doing this?

Answer

LyzandeR picture LyzandeR · Sep 7, 2017

The equivalent in R is sprintf:

year = "2008"
mnth = "1"
day = "31"
url = sprintf("https:.../KBOS/%s/%s/%s/DailyHistory.html", year, mnth, day)
#[1] "https:.../KBOS/2008/1/31/DailyHistory.html"

Also, although I think it is an overkill, you could define an operator yourself too.

`%--%` <- function(x, y) {

  do.call(sprintf, c(list(x), y))

}

"https:.../KBOS/%s/%s/%s/DailyHistory.html" %--% c(year, mnth, day)
#[1] "https:.../KBOS/2008/1/31/DailyHistory.html"