我想使用以下代码执行循环以从多个工作站捕获天气数据:
library(rwunderground)
sample_df <- data.frame(airportid = c("K6A2",
"KAPA",
"KASD",
"KATL",
"KBKF",
"KBKF",
"KCCO",
"KDEN",
"KFFC",
"KFRG"),
stringsAsFactors = FALSE)
history_range(set_location(airport_code =sample_df$airportid), date_start = "20170815", date_end = "20170822",
limit = 10, no_api = FALSE, use_metric = FALSE, key = get_api_key(),
raw = FALSE, message = TRUE)
它不会起作用。
答案 0 :(得分:1)
目前,您正在将整个向量(多个字符值)传递到history_range
调用中。只需lapply
迭代传递矢量值,甚至返回history_range()
返回对象列表。下面使用定义的函数来传递参数。根据需要扩展功能以执行其他操作。
capture_weather_data <- function(airport_id) {
data <- history_range(set_location(airport_code=airport_id),
date_start = "20170815", date_end = "20170822",
limit = 10, no_api = FALSE, use_metric = FALSE, key = get_api_key(),
raw = FALSE, message = TRUE)
write.csv(data, paste0("/path/to/output/", airport_id, ".csv"))
return(data)
}
data_list <- lapply(sample_df$airportid, capture_weather_data)
另外,将列表中的每个项目命名为相应的 airport_id 字符值:
data_list <- setNames(data_list, sample_df$airportid)
data_list$K6A2 # 1st ITEM
data_list$KAPA # 2nd ITEM
data_list$KASD # 3rd ITEM
...
实际上,使用sapply
(lapply
的包装器),您可以生成列表并在同一个调用中为每个项命名,但输入向量必须是字符类型(不是因子):
data_list <- sapply(as.character(sample_df$airportid), capture_weather_data,
simplify=FALSE, USE.NAMES=TRUE)
names(data_list)
答案 1 :(得分:0)
我认为你根据我的理解从rwunderground包中提出的这个history_range函数需要一个天气地下API密钥。我去了该网站甚至注册了它,但是为了获得密钥(https://www.wunderground.com/weather/api),电子邮件验证过程目前似乎没有正常工作。
相反,我去了CRAN镜像(https://github.com/cran/rwunderground/blob/master/R/history.R),根据我的理解,该函数只接受一个字符串作为set_location参数。文档中提供的示例是
history(set_location(airport_code = "SEA"), "20130101")
那么你应该做什么作为&#34;循环&#34;而是
sample_df <- as.vector(sample_df)
for(i in 1:length(sample_df)){
history_range(
set_location(airport_code = sample_df[[i]]),
date_start = "20170815", date_end = "20170822",
limit = 10, no_api = FALSE, use_metric = FALSE,
key = get_api_key(),
raw = FALSE, message = TRUE)
}
如果这不起作用,请告诉我。 (Ack,有人在我输入这个问题时也给了这个问题另一个答案。)