对于R中的循环,产生较少的值

时间:2017-11-24 13:05:43

标签: r for-loop rmysql

我在R中有以下for循环来从4个My SQL表中提取数据。数据帧长度指的是

     for (i in length(dataframe)){

     sql1 <- paste("SELECT T.TenantLookupID, T.TenantShortCode, 
         B.BusinessUnitShortCode, C.CampaignShortCode
            from TenantLookup AS T
            JOIN BusinessUnitLookup AS B ON T.TenantLookupID = B.TenantLookupID
            JOIN CampaignLookup AS C ON C.TenantLookupID = B.TenantLookupID 
            where T.TenantID = '611c5d1c_f0bc_4bd4_b1c1_f6800d50fc34' AND B.BusinessUnitID = 0
            AND C.CampaignID =", i,sep="")

      dataframe2<-dbGetQuery(jobdbconn, sql1)}

代码应该产生30个值 然而,它产生的价值要少得多。有人可以提出解决方案

    TenantLookupID TenantShortCode BusinessUnitShortCode CampaignShortCode
    1            572             NOn                     w               uvn
    2            572             NOn                     w               Mxc
    3            572             NOn                     w               W0H
    4            572             NOn                     w               qr5
    5            572             NOn                     w               ABy

格式正确但数量远低于预期

1 个答案:

答案 0 :(得分:1)

这不是一个范围,只有一个值:

 for (i in length(dataframe)) {

对于从1到长度(数据帧)的所有值,请使用:

 for (i in 1:length(dataframe)) {

修改

此外,在循环结束时,您每次都会覆盖结果数据框。也许

dataframe2<-dbGetQuery(jobdbconn, sql1)

应该是

dataframe2<-rbind(dataframe2, dbGetQuery(jobdbconn, sql1))

这样的事情:

dataframe2 <- data.frame()
for (i in length(dataframe)){

 sql1 <- paste("SELECT T.TenantLookupID, T.TenantShortCode, 
     B.BusinessUnitShortCode, C.CampaignShortCode
        from TenantLookup AS T
        JOIN BusinessUnitLookup AS B ON T.TenantLookupID = B.TenantLookupID
        JOIN CampaignLookup AS C ON C.TenantLookupID = B.TenantLookupID 
        where T.TenantID = '611c5d1c_f0bc_4bd4_b1c1_f6800d50fc34' AND B.BusinessUnitID = 0
        AND C.CampaignID =", i,sep="")

  dataframe2<-rbind(dataframe2, dbGetQuery(jobdbconn, sql1)}

HTH