验证循环正在调用多个列表中具有相同名称的元素

问题描述 投票:0回答:1

我有两个具有相同元素名称的大型列表(超过 700 个元素)。 我分析的下一步是通过用 C++ 编写的引导函数计算置信区间。要使用该函数,我需要调用两个列表中的元素、给定个体的原始数据和该个体的模型输出。 我的主管担心循环不“匹配”列表之间的元素名称。由于一个列表是从另一个列表上循环的函数创建的,并且两个列表都没有重新排列元素,所以我不太担心会调用不匹配的元素,但最好确保名称之前匹配如果我们最终在未通过与当前列表相同的方式生成的数据上使用此引导函数,则运行该函数。

示例列表:

lst_A <- list(
  m1 = matrix(1:12, nrow = 4), 
  m2 = matrix(1:9, nrow = 3), 
  m3 = matrix(1:6, nrow = 2)
)

lst_b <- list(m1 = c(t1 = 2, t2 = 2, r0 = 2, r1 = 2, k0 = 2, k1 = 2), 
m2 = c(t1 = 1, t2 = 1, r0 = 1, r1 = 1, k0 = 1, k1 = 1), 
m3 = c(t1 = 10, t2 = 10, r0 = 10, r1 = 10, k0 = 10, k1 = 10))

lst_A 是原始数据的矩阵列表,每个矩阵具有相同的列数但行数不同。创建 lst_b(列表的列表)的函数需要矩阵。

我有一个类似于以下的循环,将结果写入另一个列表:

out <- list()
ci_outs_names <- names(lst_A) 
for (i in seq_along(lst_A)) { 
  CIs = (lst_A[[i]] * lst_b[[i]])
  out[[ci_outs_names[i]]] <- CIs
}

我还没有找到在循环中匹配列表元素的选项。使用循环是否可以实现这一点,或者是否有另一种方法可以在使用多个列表通知函数时允许元素名称匹配?请注意,我无法修改 C++ 代码/函数。

如果有帮助,“真正的”循环代码是:

ci_out <- list()
ci_outs_names <- names(lst_A) 
for (i in seq_along(lst_A)) { 
    sourceCpp("cpp_functions.cpp") 
    CIs = bootstrap_CI(data_in = lst_A[[i]],
                       optim_pars = lst_b[[i]], 
                       n_iter = 100, 
                       times_matrix = times_matrix, intervals = c(14, 7, 3, 1), NLL_include = 5, cpp = TRUE) # These are all just additional arguments to another function which is called inside of this function
    ci_out[[ci_outs_names[i]]] <- CIs
   }

注意(可能与这个问题无关,但为了以防万一,我会提到):即使使用

n_iter = 10
和 2 个元素的列表,此代码也会始终使 RStudio(白屏)崩溃。该循环的缩小版本 (
n_iter = 50
) 适用于控制台中的完整数据集。

r list loops names
1个回答
0
投票

也许你正在追求这样的东西

Map(`*`, lst_A, lst_b[names(lst_A)])
© www.soinside.com 2019 - 2024. All rights reserved.