为了节省时间,我想迭代一个月开始和月结束日期的向量,并每次发出一个API请求并存储每个请求的输出 .
假设我们从名为dateTable的数据框开始,该数据框保存日期范围的月份的第一天和最后一天:
firstDOM lastDOM
2016-05-01 2016-05-31
2016-06-01 2016-06-30
2016-07-01 2016-07-31
2016-08-01 2016-08-31
2016-09-01 2016-09-30
2016-10-01 2016-10-31
2016-11-01 2016-11-30
2016-12-01 2016-12-31
2017-01-01 2017-01-31
2017-02-01 2017-02-28
2017-03-01 2017-03-31
2017-04-01 2017-04-30
2017-05-01 2017-05-31
2017-06-01 2017-06-30
2017-07-01 2017-07-31
2017-08-01 2017-08-31
我想遍历每一行并将startDate和endDate粘贴到以下的其他API请求中但是在运行这段代码时我不断收到以下错误,我不确定是什么导致它:
for (i in 1:nrow(dateTable)) {
startDate <- dateTable$firstDOM
endDate <- dateTable$lastDOM
#Obtian the Volume of Mentions by Day using declared specs from above
qryMen <- GET(paste("https://newapi.brandwatch.com/projects/", projId, dataSpec
, "?queryId=", queryId, "&startDate=", startDate, "&endDate=", endDate
, '&pageSize=', pageSize, "&access_token=", accessToken$access_token, sep = ""))
}
#Error
Error: length(url) == 1 is not TRUE
任何帮助将不胜感激!
2 回答
目前,您在每个迭代中传递
for
循环中的整个向量,而不是通过循环变量i
进行索引:尽管如此,请考虑
Map
(或等效mapply(..., SIMPLIFY=FALSE)
)以元素方式迭代两列 . 使用这种方法,您可以保存大量对象(无论您的查询返回什么),其中元素的数量等于dataTable的行数 . 然后,您可以使用此列表进行进一步操作 .偶然的事情,你的for循环实际上并没有做任何事情 . 你说
for i in ...
但你再也没有引用i
. 并且,如果您发布一些示例数据,以便我们可以尝试重新创建您正在执行的操作,那么就会有帮助 .无论如何,错误告诉你出了什么问题:你无法将URL向量传递给GET . 将传递给GET()的所有内容都粘贴到控制台中 . 您将获得n个URL,n是dateTable中的行数 .
我'm assuming your R objects that you pass to GET (other than startDate and endDate) don'改变?如果是这种情况,并且您想要使用循环,则可以预先分配与您希望返回的数据长度相同的向量,然后遍历startDate和endDate,将它们传递给GET()并将它们插入到
qryMen
中 . 宾语 .