日付変数を使用してリクエストを送信する必要があるURLがあります。 httpsアドレスは日付変数を受け取ります。 Pythonのフォーマット演算子%のようなものを使用して、日付をアドレス文字列に割り当てたいです。 Rには同様の演算子がありますか、またはpaste()に依存する必要がありますか?
# Example variables
year = "2008"
mnth = "1"
day = "31"
これは私がPython 2.7で行うことです:
url = "https:.../KBOS/%s/%s/%s/DailyHistory.html" % (year, mnth, day)
または、3。+で.format()を使用します。
私がRでやることを知っているのは冗長であり、貼り付けに依存しています:
url_start = "https:.../KBOS/"
url_end = "/DailyHistory.html"
paste(url_start, year, "/", mnth, "/", day, url_end)
これを行うより良い方法はありますか?
Rに相当するのは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"
また、やり過ぎだと思いますが、オペレーターも自分で定義できます。
`%--%` <- 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"
sprintf
の代わりに、 glue
をチェックアウトすることもできます。
更新:stringr 1.2.0では、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
stringr
パッケージには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"
または、リストを使用します(数値が渡されることに注意してください):
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"
ところで、たとえば、月のフィールドの幅を2文字にする必要がある場合は、フォーマットディレクティブも渡すことができます。
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"