2

How do i store the following loop result in a single vector, keeping it's order? Obs.: print() is there only for reprex purposes.

I've tried with sapply() but it reordered the results.

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"

Created on 2020-07-17 by the reprex package (v0.3.0)

Alberson Miranda
  • 1,248
  • 7
  • 25
  • 1
    You can create a vector and assign the value instead of `print` i.e. `nm1 <- c(); for(x in meses){ nm1 <- c(nm1, paste(colunas, x, sep="_"))}` – akrun Jul 17 '20 at 20:52
  • 1
    `outer` might be another option `x <- c(outer(colunas, meses, paste, sep="_")); print(x)` – markus Jul 17 '20 at 20:55
  • @akrun your marked this one as duplicate, but the other is a little messy so i won't delete this one, ok? – Alberson Miranda Jul 17 '20 at 21:16
  • @AlbersonMiranda your original question was related to storing the output and the dupe tag for first one does that. Second one is based on the accepted answer and there are lots of existing answers for those – akrun Jul 17 '20 at 21:17

4 Answers4

4

Good question with a lot of possible answers. :-)

E.g. instead of for loop you can use lapply() and unlist() that into a simple vector:

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"

Created on 2020-07-17 by the reprex package (v0.3.0)

3

Using sapply as to avoid copying the vector multiple times:

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"  

Julian_Hn
  • 2,086
  • 1
  • 8
  • 18
1

Here you go:

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"

The results <- c(results, paste(colunas, x, sep = "_")) can be pretty slow, because we are copying whole results vector, but in case of small amount of data it should be just fine.

777moneymaker
  • 697
  • 4
  • 15
0

Using your nomes vector:

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" 
Duck
  • 39,058
  • 13
  • 42
  • 84