以编程方式编写csv lapply函数的结果

时间:2017-01-03 20:55:22

标签: r function loops csv lapply

我有以下代码:

OD.viajes <- function(per) {

  require(ff)
  require(ETLUtils)
  require(RPostgreSQL)
  require(dplyr)
  require(stringr)

  con <- dbConnect("PostgreSQL", host = "11.111.111.11", user= "postgres", password="111111", dbname = "BASE_U_CHILE")
  qsql_par.ts <- "SELECT DISTINCT(cod_ts), cod_usu FROM par_ts;"
  qsql_par.viaje <- paste0(
    "SELECT COUNT(*), paraderosubida, paraderobajada, periodomediodeviaje FROM viajes201504_transparencia
     WHERE periodomediodeviaje = '",per,"' AND paraderosubida IN ('L-15-6-105-PO', 'L-15-6-115-PO', 'L-15-6-95-PO', 'L-16-14-100-NS')
     GROUP BY paraderosubida, paraderobajada, periodomediodeviaje;")

  par.ts <- read.dbi.ffdf(dbConnect.args = list(con), query = qsql_par.ts, VERBOSE=TRUE)  
  par.ts.sube <- as.data.frame(par.ts)
  names(par.ts.sube) <- c("par.sub", "cod.usu.sub")
  par.ts.baja <- as.data.frame(par.ts)
  names(par.ts.baja) <- c("par.baj", "cod.usu.baj")

  par.viaje <- read.dbi.ffdf(dbConnect.args = list(con), query =      qsql_par.viaje, VERBOSE=TRUE) 
  names(par.viaje) <- c("cuenta", "par.sub", "par.baj", "periodo")
  par.viaje <- as.data.frame(par.viaje)

  par.od.viaj <- left_join(par.viaje, par.ts.sube, by = "par.sub")
  par.od.viaj <- left_join(par.od.viaj, par.ts.baja, by = "par.baj")

  dbDisconnect(con)
  par.od.viaj

}

write.OD.viajes <- function(per) {
  write.csv(OD.viajes(per), paste0("par.od.viaj_",per,".csv"), row.names = FALSE)
}

现在我想根据每个变量的值导出* .csv文件,我猜这可以用lapply函数完成,如下所示:

lapply(my_list, function(x)write.OD.viajes(my_list[[x]], file = paste0(x, '.csv')))

但是这个表单有错误(我的功能还可以,问题是使用l​​apply)。我必须对我的代码做什么样的更正?

我尝试过For循环,但这需要很长时间,这就是我想要使用lapply的原因。

my_list <- list(c("04 - MANANA DOMINGO",
         "05 - MANANA SABADO",
         "05 - MEDIODIA DOMINGO",
         "12 - PRE NOCTURNO",
         "07 - TRANSICION DOMINGO NOCTURNO",
         "06 - PUNTA MEDIODIA SABADO",
         "04 - PUNTA MANANA",
         "02 - NOCTURNO SABADO",
         "03 - TRANSICION NOCTURNO"))

0 个答案:

没有答案