用于在具有唯一值的字符串上循环的R函数

用于在具有唯一值的字符串上循环的R函数,r,string,loops,foreach,R,String,Loops,Foreach,我正在做一个项目,我必须在一个相对较小的服务器上下载超过1000万条记录。因此,我不需要下载整个数据集,而需要下载更小的部分。我正在尝试创建一个循环,该循环将根据日期调用批量数据。我习惯于在Stata中编码,您可以使用'x'或字符串中的某个变体来调用本地。然而,我在R中找不到这样做的方法。下面是我正在使用的一小段代码。基本上,每当我尝试运行此“val”和“val2”时,它们都不会使用定义列表中的日期进行更新,因此输出的字面意思就是服务器试图在“val”和“val2”之间搜索,而不是在“20190

我正在做一个项目,我必须在一个相对较小的服务器上下载超过1000万条记录。因此,我不需要下载整个数据集,而需要下载更小的部分。我正在尝试创建一个循环,该循环将根据日期调用批量数据。我习惯于在Stata中编码,您可以使用'x'或字符串中的某个变体来调用本地。然而,我在R中找不到这样做的方法。下面是我正在使用的一小段代码。基本上,每当我尝试运行此“val”和“val2”时,它们都不会使用定义列表中的日期进行更新,因此输出的字面意思就是服务器试图在“val”和“val2”之间搜索,而不是在“20190101”和“20190301”之间搜索。非常感谢您对如何解决此问题的任何建议

x<-c(20190101, 20190301)
y<-c(20190301, 20190501)
foreach (val=x, val2=y) %do% {
     data<-DBI::dbGetQuery(myconn, "SELECT * FROM .... WHERE (DATE BETWEEN 'val' AND 'val2')")
}
带有基本循环的
x

x<-c(20190101, 20190301)
y<-c(20190301, 20190501)

data_all = c()

for(i in 1:length(x)){
  
  query = paste0("SELECT * FROM .... WHERE (DATE BETWEEN '",
  x[i],  "' AND '",  y[i], "')")
  
  data <- DBI::dbGetQuery(myconn, query)
  data_all = rbind(data_all, data)

}
带有基本循环的
x

x<-c(20190101, 20190301)
y<-c(20190301, 20190501)

data_all = c()

for(i in 1:length(x)){
  
  query = paste0("SELECT * FROM .... WHERE (DATE BETWEEN '",
  x[i],  "' AND '",  y[i], "')")
  
  data <- DBI::dbGetQuery(myconn, query)
  data_all = rbind(data_all, data)

}

x使用
sprintf
可以构造查询并使用
lappy
+
do.call
将结果合并到一个数据帧中

x<-c(20190101, 20190301)
y<-c(20190301, 20190501)

input <- sprintf("SELECT * FROM .... WHERE (DATE BETWEEN '%s' AND '%s')", x, y)
result <- do.call(rbind, lapply(input, function(x) DBI::dbGetQuery(myconn, x)))

使用
sprintf
可以构造查询并使用
lappy
+
do.call
将结果合并到一个数据帧中

x<-c(20190101, 20190301)
y<-c(20190301, 20190501)

input <- sprintf("SELECT * FROM .... WHERE (DATE BETWEEN '%s' AND '%s')", x, y)
result <- do.call(rbind, lapply(input, function(x) DBI::dbGetQuery(myconn, x)))

为了让我们能够帮助您,请编辑您的问题以包含一个。例如,要生成最小数据集,可以使用
head()
subset()
或索引。然后使用
dput()
给我们一些可以立即放入R的东西。另外,请确保你知道该怎么做。有关更多信息,请访问Stack Overflow。非常感谢。为了让我们能够帮助您,请编辑您的问题以包含一个。例如,要生成最小数据集,可以使用
head()
subset()
或索引。然后使用
dput()
给我们一些可以立即放入R的东西。另外,请确保你知道该怎么做。有关更多信息,请访问Stack Overflow。非常感谢。