【问题标题】:For loops storing issue [duplicate]对于循环存储问题[重复]
【发布时间】:2020-11-07 17:03:29
【问题描述】:

如何将以下循环结果存储在单个向量中,并保持其顺序? Obs.:print() 仅用于表示目的。

我已尝试使用 sapply(),但它重新排序了结果。

meses = c("jan", "fev", "mar", "abr", "mai", "jun",
          "jul", "ago", "set", "out", "nov", "dez", "total")

colunas = c("orcado", "realizado", "desvio", "desvio%")

nomes = NULL

for (x in meses) {
  print(paste(colunas, x, sep = "_"))
}
#> [1] "orcado_jan"    "realizado_jan" "desvio_jan"    "desvio%_jan"  
#> [1] "orcado_fev"    "realizado_fev" "desvio_fev"    "desvio%_fev"  
#> [1] "orcado_mar"    "realizado_mar" "desvio_mar"    "desvio%_mar"  
#> [1] "orcado_abr"    "realizado_abr" "desvio_abr"    "desvio%_abr"  
#> [1] "orcado_mai"    "realizado_mai" "desvio_mai"    "desvio%_mai"  
#> [1] "orcado_jun"    "realizado_jun" "desvio_jun"    "desvio%_jun"  
#> [1] "orcado_jul"    "realizado_jul" "desvio_jul"    "desvio%_jul"  
#> [1] "orcado_ago"    "realizado_ago" "desvio_ago"    "desvio%_ago"  
#> [1] "orcado_set"    "realizado_set" "desvio_set"    "desvio%_set"  
#> [1] "orcado_out"    "realizado_out" "desvio_out"    "desvio%_out"  
#> [1] "orcado_nov"    "realizado_nov" "desvio_nov"    "desvio%_nov"  
#> [1] "orcado_dez"    "realizado_dez" "desvio_dez"    "desvio%_dez"  
#> [1] "orcado_total"    "realizado_total" "desvio_total"    "desvio%_total"

reprex package (v0.3.0) 于 2020-07-17 创建

【问题讨论】:

  • 您可以创建一个向量并分配值而不是print,即nm1 <- c(); for(x in meses){ nm1 <- c(nm1, paste(colunas, x, sep="_"))}
  • outer 可能是另一种选择 x <- c(outer(colunas, meses, paste, sep="_")); print(x)
  • @akrun 你把这个标记为重复,但另一个有点乱所以我不会删除这个,好吗?
  • @AlbersonMiranda 您最初的问题与存储输出有关,而第一个的欺骗标签就是这样做的。第二个是基于接受的答案,并且有很多现有的答案

标签: r


【解决方案1】:

很好的问题,有很多可能的答案。 :-)

例如而不是 for 循环,您可以使用 lapply()unlist() 将其转换为一个简单的向量:

unlist(lapply(meses, function(x) paste(colunas, x, sep = "_")))
#>  [1] "orcado_jan"      "realizado_jan"   "desvio_jan"      "desvio%_jan"    
#>  [5] "orcado_fev"      "realizado_fev"   "desvio_fev"      "desvio%_fev"    
#>  [9] "orcado_mar"      "realizado_mar"   "desvio_mar"      "desvio%_mar"    
#> [13] "orcado_abr"      "realizado_abr"   "desvio_abr"      "desvio%_abr"    
#> [17] "orcado_mai"      "realizado_mai"   "desvio_mai"      "desvio%_mai"    
#> [21] "orcado_jun"      "realizado_jun"   "desvio_jun"      "desvio%_jun"    
#> [25] "orcado_jul"      "realizado_jul"   "desvio_jul"      "desvio%_jul"    
#> [29] "orcado_ago"      "realizado_ago"   "desvio_ago"      "desvio%_ago"    
#> [33] "orcado_set"      "realizado_set"   "desvio_set"      "desvio%_set"    
#> [37] "orcado_out"      "realizado_out"   "desvio_out"      "desvio%_out"    
#> [41] "orcado_nov"      "realizado_nov"   "desvio_nov"      "desvio%_nov"    
#> [45] "orcado_dez"      "realizado_dez"   "desvio_dez"      "desvio%_dez"    
#> [49] "orcado_total"    "realizado_total" "desvio_total"    "desvio%_total"

reprex package (v0.3.0) 于 2020-07-17 创建

【讨论】:

    【解决方案2】:

    使用sapply 来避免多次复制向量:

    meses = c("jan", "fev", "mar", "abr", "mai", "jun",
              "jul", "ago", "set", "out", "nov", "dez", "total")
    
    colunas = c("orcado", "realizado", "desvio", "desvio%")
    
    
    as.vector(sapply(meses,function(x) paste(colunas,x,sep="_")))
    
     [1] "orcado_jan"      "realizado_jan"   "desvio_jan"      "desvio%_jan"     "orcado_fev"      "realizado_fev"   "desvio_fev"      "desvio%_fev"    
     [9] "orcado_mar"      "realizado_mar"   "desvio_mar"      "desvio%_mar"     "orcado_abr"      "realizado_abr"   "desvio_abr"      "desvio%_abr"    
    [17] "orcado_mai"      "realizado_mai"   "desvio_mai"      "desvio%_mai"     "orcado_jun"      "realizado_jun"   "desvio_jun"      "desvio%_jun"    
    [25] "orcado_jul"      "realizado_jul"   "desvio_jul"      "desvio%_jul"     "orcado_ago"      "realizado_ago"   "desvio_ago"      "desvio%_ago"    
    [33] "orcado_set"      "realizado_set"   "desvio_set"      "desvio%_set"     "orcado_out"      "realizado_out"   "desvio_out"      "desvio%_out"    
    [41] "orcado_nov"      "realizado_nov"   "desvio_nov"      "desvio%_nov"     "orcado_dez"      "realizado_dez"   "desvio_dez"      "desvio%_dez"    
    [49] "orcado_total"    "realizado_total" "desvio_total"    "desvio%_total"  
    
    

    【讨论】:

      【解决方案3】:

      给你:

      results <- c()
      for(x in meses){
      +     results <- c(results, paste(colunas, x, sep = "_"))
      + }
      > results
       [1] "orcado_jan"      "realizado_jan"   "desvio_jan"      "desvio%_jan"     "orcado_fev"     
       [6] "realizado_fev"   "desvio_fev"      "desvio%_fev"     "orcado_mar"      "realizado_mar"  
      [11] "desvio_mar"      "desvio%_mar"     "orcado_abr"      "realizado_abr"   "desvio_abr"     
      [16] "desvio%_abr"     "orcado_mai"      "realizado_mai"   "desvio_mai"      "desvio%_mai"    
      [21] "orcado_jun"      "realizado_jun"   "desvio_jun"      "desvio%_jun"     "orcado_jul"     
      [26] "realizado_jul"   "desvio_jul"      "desvio%_jul"     "orcado_ago"      "realizado_ago"  
      [31] "desvio_ago"      "desvio%_ago"     "orcado_set"      "realizado_set"   "desvio_set"     
      [36] "desvio%_set"     "orcado_out"      "realizado_out"   "desvio_out"      "desvio%_out"    
      [41] "orcado_nov"      "realizado_nov"   "desvio_nov"      "desvio%_nov"     "orcado_dez"     
      [46] "realizado_dez"   "desvio_dez"      "desvio%_dez"     "orcado_total"    "realizado_total"
      [51] "desvio_total"    "desvio%_total"
      

      results &lt;- c(results, paste(colunas, x, sep = "_")) 可能会很慢,因为我们正在复制整个 results 向量,但在少量数据的情况下应该没问题。

      【讨论】:

        【解决方案4】:

        使用您的nomes 向量:

        meses = c("jan", "fev", "mar", "abr", "mai", "jun",
                  "jul", "ago", "set", "out", "nov", "dez", "total")
        
        colunas = c("orcado", "realizado", "desvio", "desvio%")
        
        nomes = c()
        
        for (x in meses) {
          y <- paste(colunas, x, sep = "_")
          nomes <- c(nomes,y)
        }
        
        [1] "orcado_jan"      "realizado_jan"   "desvio_jan"      "desvio%_jan"     "orcado_fev"      "realizado_fev"  
         [7] "desvio_fev"      "desvio%_fev"     "orcado_mar"      "realizado_mar"   "desvio_mar"      "desvio%_mar"    
        [13] "orcado_abr"      "realizado_abr"   "desvio_abr"      "desvio%_abr"     "orcado_mai"      "realizado_mai"  
        [19] "desvio_mai"      "desvio%_mai"     "orcado_jun"      "realizado_jun"   "desvio_jun"      "desvio%_jun"    
        [25] "orcado_jul"      "realizado_jul"   "desvio_jul"      "desvio%_jul"     "orcado_ago"      "realizado_ago"  
        [31] "desvio_ago"      "desvio%_ago"     "orcado_set"      "realizado_set"   "desvio_set"      "desvio%_set"    
        [37] "orcado_out"      "realizado_out"   "desvio_out"      "desvio%_out"     "orcado_nov"      "realizado_nov"  
        [43] "desvio_nov"      "desvio%_nov"     "orcado_dez"      "realizado_dez"   "desvio_dez"      "desvio%_dez"    
        [49] "orcado_total"    "realizado_total" "desvio_total"    "desvio%_total" 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-15
          • 2018-05-31
          • 2011-08-09
          相关资源
          最近更新 更多