我有一个网址,我需要发送使用日期变量的请求。 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)
有更好的方法吗?
答案 0 :(得分:28)
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"
答案 1 :(得分:18)
作为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
答案 2 :(得分:6)
list.contains()
包具有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"
stringr::str_interp("https:.../KBOS/${year}/$[02i]{mnth}/${day}/DailyHistory.html", list(year = 2008, mnth = 1, day = 31))