首页 > 解决方案 > R中给定代码的循环解决方案是什么?

问题描述

我想要过去 7 天的合并数据。我正在使用以下代码来获得我的结果,但这不是合适的方式。使用 for 循环给我一个错误。也许我做错了。

tables <- db_list_tables(con)
tables
#Total 366 days

day_366 <- tbl(con, "ga_sessions_20170801") %>%
  head(10) %>% 
  collect()

day_365 <- tbl(con, "ga_sessions_20170730") %>%
  head(10) %>% 
  collect()

day_364 <- tbl(con, "ga_sessions_20170729") %>%
  head(10) %>% 
  collect()

day_363 <- tbl(con, "ga_sessions_20170728") %>%
  head(10) %>% 
  collect()

day_362 <- tbl(con, "ga_sessions_20170727") %>%
  head(10) %>% 
  collect()

day_361 <- tbl(con, "ga_sessions_20170726") %>%
  head(10) %>% 
  collect()

day_360 <- tbl(con, "ga_sessions_20170725") %>%
  head(10) %>% 
  collect()

day_359 <- tbl(con, "ga_sessions_20170724") %>%
  head(10) %>% 
  collect()

seven_days <- rbind(day_366, day_365, day_364, day_363, day_362, day_361, day_360, day_359)

标签: rdplyr

解决方案


我们可以遍历对象并collect

library(purrr)
library(dbplyr)  
ga_session <- sprintf("ga_sessions_%d", c(20170801, 20170730:20170724))   
seven_days <- map_dfr(ga_session,  ~  tbl(con, .x) %>%
             head %>%
             collect())

或使用for循环

lst1 <- vector('list', length(ga_session)
for(i in seq_along(ga_session)) {
    lst1[[i]] <- tbl(con, ga_session[i]) %>% 
                 head %>%
                 collect()
   }
out <- do.call(rbind, lst1) 

推荐阅读