J'ai une URL dont j'ai besoin pour envoyer une demande à l'aide de variables de date. L'adresse https prend les variables de date. Je voudrais attribuer les dates à la chaîne d'adresse en utilisant quelque chose comme l'opérateur de formatage% en Python. Est-ce que R a un opérateur similaire ou dois-je me fier à paste ()?
# Example variables
year = "2008"
mnth = "1"
day = "31"
C'est ce que je ferais en Python 2.7:
url = "https:.../KBOS/%s/%s/%s/DailyHistory.html" % (year, mnth, day)
Ou en utilisant .format () dans 3. +.
La seule chose que je saurais faire dans R semble verbeuse et repose sur la pâte:
url_start = "https:.../KBOS/"
url_end = "/DailyHistory.html"
paste(url_start, year, "/", mnth, "/", day, url_end)
Existe-t-il une meilleure façon de le faire?
L'équivalent dans R est 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"
De plus, même si je pense que c'est une exagération, vous pouvez également définir vous-même un opérateur.
`%--%` <- 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"
Comme alternative à sprintf
, vous voudrez peut-être vérifier glue
.
Mise à jour: Dans stringr 1.2.0, ils ont ajouté une fonction wrapper de glue::glue()
, - str_glue()
library(glue)
year = "2008"
mnth = "1"
day = "31"
url = glue("https:.../KBOS/{year}/{mnth}/{day}/DailyHistory.html")
url
#> https:.../KBOS/2008/1/31/DailyHistory.html
Le package stringr
a la fonction str_interp()
:
year = "2008"
mnth = "1"
day = "31"
stringr::str_interp("https:.../KBOS/${year}/${mnth}/${day}/DailyHistory.html")
[1] "https:.../KBOS/2008/1/31/DailyHistory.html"
ou en utilisant une liste (notez que maintenant des valeurs numériques sont passées):
stringr::str_interp("https:.../KBOS/${year}/${mnth}/${day}/DailyHistory.html",
list(year = 2008, mnth = 1, day = 31))
[1] "https:.../KBOS/2008/1/31/DailyHistory.html"
BTW, les directives de formatage peuvent également être transmises, par exemple, si les champs du mois doivent avoir deux caractères de large:
stringr::str_interp("https:.../KBOS/${year}/$[02i]{mnth}/${day}/DailyHistory.html",
list(year = 2008, mnth = 1, day = 31))
[1] "https:.../KBOS/2008/01/31/DailyHistory.html"