簡體   English   中英

R:從4個向量運行循環以輸出4個數據表

[英]R: Run a loop from 4 vectors to output 4 data tables

大家,

我有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)

我想在注入的vQuery中輸入V1,V2 ...,其中Vectors= #?? 現在,我正在嘗試做一個可能的for循環來運行上面的代碼,並且當vTable代碼運行時,我將輸出4個數據表V1table,V2表,..... for循環最適合這個。 我可以復制和粘貼整個代碼4次,但想將其壓縮下來。

考慮為您的接收矢量元素的過程設置已定義的方法。 然后使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM