R: Вложенный для цикла для создания объединенной строки - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь получить цикл for для печати последовательности объединенных строк. Каждый вывод должен состоять из идентификатора группы и идентификатора подгруппы. Я хотел бы, чтобы выходные данные возвращали только количество подгрупп в группе, а не все возможные подгруппы для всех групп.

## list the solution groups, must keep for name of output
chalSolutions <- c("c_2k", "c_6k", "c_9k", "c_13k")

## create cluster limit for each solution group
sol_limits <- c(2,6,9,13)

## nested loop which ideally steps through each solution group, returning 
## a string for only those clusters whose ID is less than or equal to the 
## limit for each group

for(sol in chalSolutions){
   for(lim in sol_limits){
     chalClusters <- c(1:lim)
     for(i in chalClusters){
      obsv <- paste0("results_list$",sol,"_",i,"_obsv")
      print(obsv)
  }
 }
}

Вывод в настоящее время выглядит так:

[1] "results_list$c_2k_1_obsv"
[1] "results_list$c_2k_2_obsv"
[1] "results_list$c_2k_1_obsv"
...
[1] "results_list$c_2k_6_obsv"
[1] "results_list$c_2k_1_obsv"
...
[1] "results_list$c_2k_9_obsv"
[1] "results_list$c_2k_1_obsv"
...
[1] "results_list$c_2k_13_obsv"
[1] "results_list$c_6k_1_obsv"
[1] "results_list$c_6k_2_obsv"
[1] "results_list$c_6k_1_obsv"
...
[1] "results_list$c_6k_6_obsv"
[1] "results_list$c_6k_1_obsv"
...
[1] "results_list$c_6k_9_obsv"
...

тогда как это должно выглядеть так:

[1] "results_list$c_2k_1_obsv"
[1] "results_list$c_2k_2_obsv"
[1] "results_list$c_6k_1_obsv"
...
[1] "results_list$c_6k_6_obsv"
[1] "results_list$c_9k_1_obsv"
...
[1] "results_list$c_9k_9_obsv"
[1] "results_list$c_13k_1_obsv"
...
[1] "results_list$c_13k_13_obsv"

1 Ответ

1 голос
/ 21 мая 2019

Рассмотрим mapply (элементный цикл члена семейства apply) между списком равных длин ваших входных данных.

obsv <- mapply(function(c, s) paste0("results_list$", c, "_", 1:s, "_obsv"), 
               chalSolutions, sol_limits)   
obsv
# $c_2k
# [1] "results_list$c_2k_1_obsv" "results_list$c_2k_2_obsv"
# 
# $c_6k
# [1] "results_list$c_6k_1_obsv" "results_list$c_6k_2_obsv"
# [3] "results_list$c_6k_3_obsv" "results_list$c_6k_4_obsv"
# [5] "results_list$c_6k_5_obsv" "results_list$c_6k_6_obsv"
# 
# $c_9k
# [1] "results_list$c_9k_1_obsv" "results_list$c_9k_2_obsv"
# [3] "results_list$c_9k_3_obsv" "results_list$c_9k_4_obsv"
# [5] "results_list$c_9k_5_obsv" "results_list$c_9k_6_obsv"
# [7] "results_list$c_9k_7_obsv" "results_list$c_9k_8_obsv"
# [9] "results_list$c_9k_9_obsv"
# 
# $c_13k
#  [1] "results_list$c_13k_1_obsv"  "results_list$c_13k_2_obsv" 
#  [3] "results_list$c_13k_3_obsv"  "results_list$c_13k_4_obsv" 
#  [5] "results_list$c_13k_5_obsv"  "results_list$c_13k_6_obsv" 
#  [7] "results_list$c_13k_7_obsv"  "results_list$c_13k_8_obsv" 
#  [9] "results_list$c_13k_9_obsv"  "results_list$c_13k_10_obsv"
# [11] "results_list$c_13k_11_obsv" "results_list$c_13k_12_obsv"
# [13] "results_list$c_13k_13_obsv"

Используйте unlist, чтобы удалить вложенные векторы:

obsv <- unlist(mapply(function(c, s) paste0("results_list$", c, "_", 1:s, "_obsv"), 
                      chalSolutions, sol_limits, USE.NAMES = FALSE))
obsv
#  [1] "results_list$c_2k_1_obsv"   "results_list$c_2k_2_obsv"  
#  [3] "results_list$c_6k_1_obsv"   "results_list$c_6k_2_obsv"  
#  [5] "results_list$c_6k_3_obsv"   "results_list$c_6k_4_obsv"  
#  [7] "results_list$c_6k_5_obsv"   "results_list$c_6k_6_obsv"  
#  [9] "results_list$c_9k_1_obsv"   "results_list$c_9k_2_obsv"  
# [11] "results_list$c_9k_3_obsv"   "results_list$c_9k_4_obsv"  
# [13] "results_list$c_9k_5_obsv"   "results_list$c_9k_6_obsv"  
# [15] "results_list$c_9k_7_obsv"   "results_list$c_9k_8_obsv"  
# [17] "results_list$c_9k_9_obsv"   "results_list$c_13k_1_obsv" 
# [19] "results_list$c_13k_2_obsv"  "results_list$c_13k_3_obsv" 
# [21] "results_list$c_13k_4_obsv"  "results_list$c_13k_5_obsv" 
# [23] "results_list$c_13k_6_obsv"  "results_list$c_13k_7_obsv" 
# [25] "results_list$c_13k_8_obsv"  "results_list$c_13k_9_obsv" 
# [27] "results_list$c_13k_10_obsv" "results_list$c_13k_11_obsv"
# [29] "results_list$c_13k_12_obsv" "results_list$c_13k_13_obsv"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...