R:从4个向量运行循环以输出4个数据表

时间:2018-10-10 15:57:27

标签: r loops for-loop

所有人

我有4个向量V1,V2,V3,V4,我想在SQL查询中循环运行。对于我的SQL查询,每个向量都是此格式的数字列表(“ 8001”,“ 8002”,“ 8003”)。 如果我进行vlist <- list(c(V1, V2, V3,V4)),请给我一个列表

> vlist
[[1]]
[1] "'84035','84040','84037','84013','84036','84030','84026','84016','84020','84012','84019'"
[2] "'84010','84039','84029','84031','84022','84032','84044','84034','84041','84042','84043'"

查询

 #my code for the SQL query
vQuery <- infuse("SELECT TOP (1000) [PKID]
                           ,[Equipment]
                           ,[Order]
                           ,[ActStartDate]
                           ,[ActFinDate]
                           ,[ActStartTime]
                           ,[ActFinTime]
                           FROM [sapData].[dbo].[SAP_IW_47]
                           where Equipment IN ({{Vectors}}) 
                           and OrdCat = 'ZWAR'
                           and AcTyAct like '%TUT'
                           and ActStartDate BETWEEN '{{start}}' AND '{{end}}'"
                           , Vectors= #???, start = startdate, end = enddate) 
      # make it a data table
      VectorQuery <- queryDataHub(vQuery)
      vTable <- data.table(VectorQuery)

我想在插入Vectors= #??的vQuery中输入V1,V2,...。现在,我正在尝试做一个可能的for循环来运行上面的代码,并且当vTable代码运行时,我有4个数据表V1table,V2表,...的输出。循环为此最好。我可以复制和粘贴整个代码4次,但想将其压缩下来。

1 个答案:

答案 0 :(得分:0)

请考虑为您的接收矢量元素的过程设置已定义的方法。然后使用lapply,它是一个迭代函数,它返回长度相等的列表对象作为其输入。

for循环不同,lapply避免了簿记任务,即初始化一个空列表并在每次迭代中为其分配元素,顺便说一句,这样做也很好。

proc_query <- function(v) {
      vQuery <- infuse("SELECT TOP (1000) [PKID]
                           ,[Equipment]
                           ,[Order]
                           ,[ActStartDate]
                           ,[ActFinDate]
                           ,[ActStartTime]
                           ,[ActFinTime]
                           FROM [sapData].[dbo].[SAP_IW_47]
                           where Equipment IN ({{Vectors}}) 
                           and OrdCat = 'ZWAR'
                           and AcTyAct like '%TUT'
                           and ActStartDate BETWEEN '{{start}}' AND '{{end}}'"
                           , Vectors= v, start = startdate, end = enddate) 
      # make it a data table
      VectorQuery <- queryDataHub(vQuery)

      return(data.table(VectorQuery))
}

# LIST OF DATA TABLES
vTables <- lapply(vlist, proc_query)

或者使用for循环:

# INITIALIZE EMPTY LIST WITH DEFINED LENGTH
vTables <- vector("list", length(vlist))

for (i in seq_along(vlist)) {
   # UPDATE ELEMENTS
   vTables[[i]] <- proc_query(vlist[[i]])          # STILL CALLING DEFINED FUNCTION
}