Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中带动态变量的循环_R_Loops_Dynamic Variables - Fatal编程技术网

R中带动态变量的循环

R中带动态变量的循环,r,loops,dynamic-variables,R,Loops,Dynamic Variables,我已经为一个服务构建了一个API查询,我想创建一个循环,该循环在构建多个终端数据帧的日期之间进行迭代。到目前为止,我的代码如下所示: query1 <- "search publications in full_data for \"\\\"Education\\\"\" where type in [ \"article\" ] and (category_for.name ~\"Education\&q

我已经为一个服务构建了一个API查询,我想创建一个循环,该循环在构建多个终端数据帧的日期之间进行迭代。到目前为止,我的代码如下所示:

query1 <- "search publications in full_data for \"\\\"Education\\\"\" 
where type in [ \"article\" ] 
and (category_for.name ~\"Education\") 
and date_inserted >= \"2019-01\" and date_inserted < \"2019-02\"
return publications[type + all]"

x1 <- dsApiRequest(token = token, query = query)
m1 <- dsApi2df(D)
query1 <- "search publications in full_data for \"\\\"Education\\\"\" 
where type in [ \"article\" ] 
and (category_for.name ~\"Education\") 
and date_inserted >= \"2019-01\" and date_inserted < \"2019-02\"
return publications[type + all]"

Y1 <- dsApiRequest(token = token, query = query)
N1 <- dsApi2df(D)

THEN

query2 <- "search publications in full_data for \"\\\"Education\\\"\" 
where type in [ \"article\" ] 
and (category_for.name ~\"Education\") 
and date_inserted >= \"2019-03\" and date_inserted < \"2019-04\"
return publications[type + all]"

Y2 <- dsApiRequest(token = token, query = query)
N2 <- dsApi2df(D)

注意,日期也必须随着每次传递而改变。

我喜欢使用base
sprintf
命令来处理类似的事情,尽管
glue
包是新的,并且有一个很好的界面。使用
sprintf
可以将
%s
作为占位符放在字符串中,然后可以使用其他参数替换为值

我已经“简化”了您的查询,以关注不断变化的日期

query  <- "blah blah
and date_inserted >= \"%s\" and date_inserted < \"%s\"
return blah blah"

library(lubridate)
start_dates = seq(as.Date("2019-01-01"), as.Date("2020-09-01"), by = "2 months")
end_dates = start_dates + months(1) # lubridate is only used here for this nice months() function

query_vec = sprintf(query, format(start_dates, "%Y-%m"), format(end_dates, "%Y-%m"))
query_vec
# [1] "blah blah\nand date_inserted >= \"2019-01\" and date_inserted < \"2019-02\"\nreturn blah blah"
# [2] "blah blah\nand date_inserted >= \"2019-03\" and date_inserted < \"2019-04\"\nreturn blah blah"
# [3] "blah blah\nand date_inserted >= \"2019-05\" and date_inserted < \"2019-06\"\nreturn blah blah"
# ...
library(glue)
glue_query = "blah blah
and date_inserted >= \"{start_dates}\" and date_inserted < \"{end_dates}\"
return blah blah"

query_vec = glue(glue_query)
query_vec
# blah blah
# and date_inserted >= "2019-01-01" and date_inserted < "2019-02-01"
# return blah blah
# blah blah
# and date_inserted >= "2019-03-01" and date_inserted < "2019-04-01"
# return blah blah
# ...