我正在使用R试图使用sprintf函数打印多个网址。该网址采用http://www.weather.unh.edu/data/year/day.txt格式。我想打印多年的每一天的网址。我试过了:
day <-c(1:365)
year <-c(2001:2004)
urls<- sprintf("http://www.weather.unh.edu/data/%s/%s.txt", year, day)
但收到错误
Error in sprintf("http://www.weather.unh.edu/data/%s/%s.txt", year, day) :
arguments cannot be recycled to the same length
我正在打印这些网址,以便我可以批量导入这些网址中的原始数据。 如果有人知道如何使用sprintf或其他功能,请告诉我
答案 0 :(得分:0)
您可以使用for循环:
days <- c(1:365)
years <- c(2001:2004)
urls <- c()
for (year in years) {
for (day in days) {
urls <- c(urls, sprintf("http://www.weather.unh.edu/data/%s/%s.txt", year, day))
}
}
答案 1 :(得分:0)
你跑进了墙,因为它无法回收你给它的值。 (365/4不是一个整数)。
只需从两个中输入一个字符串,然后使用sprintf
day <- c(1:365)
year <- c(2001:2004)
day.year <- paste(rep(year,each = 365),day,sep = '/')
sprintf('http://www.weather.unh.edu/data/%s.txt',day.year)
干杯。
答案 2 :(得分:0)
您想要的是expand.grid
生成年和日的组合。
times <- expand.grid(days=1:365, years=2001:2004)
urls <- sprintf("http://www.weather.unh.edu/data/%s/%s.txt", times$year, times$days)
head(urls)
[1] "http://www.weather.unh.edu/data/2001/1.txt"
[2] "http://www.weather.unh.edu/data/2001/2.txt"
[3] "http://www.weather.unh.edu/data/2001/3.txt"
[4] "http://www.weather.unh.edu/data/2001/4.txt"
[5] "http://www.weather.unh.edu/data/2001/5.txt"
[6] "http://www.weather.unh.edu/data/2001/6.txt"
那说,这会遇到闰年等问题;你可能想要考虑seq.Date
,比如
dates <- as.POSIXlt(seq.Date(as.Date("2010-01-01"), as.Date("2014-12-31"), by="day"))
然后
urls <- sprintf(".../%s/%s", dates$year + 1900, dates$yday)