我正在尝试获取一个for循环以打印一系列串联的字符串。每个输出应包含一个组ID和一个子组ID。我希望输出只返回每个组的子组数,而不是所有组的所有可能子组。
## 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"
答案 0 :(得分:1)
在相等长度的输入列表之间考虑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"