我有一个60个尺寸的嵌套循环,即我相互嵌套60个循环。在Stata中,MWE如下所示:
forvalues i = 1/60 {
forvalues j = 1/60 {
forvalues k = 1/60 {
forvalues l = 1/60 {
... imagine the 56 remaining loops here
}
}
}
}
R中的等效项是:
for(i in 1:60) {
for(j in 1:60) {
for(k in 1:60) {
for(l in 1:60) {
... imagine the 56 remaining loops here
}
}
}
}
这里的目的是避免在我的代码中键入所有60个级别,而是为循环结构本身创建一个循环。这个问题显得微不足道。但是出于某种原因,我正在努力提出解决方案。
谢谢您的任何建议。
其他信息:
我有一个包含60个解释变量的数据集,并希望对这些变量的每种可能组合进行回归分析。更具体地说,我分别对所有60个解释变量运行因变量的单变量回归并计算某些条件。然后,将第二个回归变量添加到估计方程中,然后再次计算标准。即reg DependentVar ExplVar1 ExplVar2
,reg DependentVar ExplVar1 ExplVar3
,...,reg DependentVar ExplVar60 ExplVar59
。取决于计算的标准,该回归树的分支可以提前,也可以终止。例如。第一个分支reg DependentVar ExplVar1 ExplVar2
要么继续增长为reg DependentVar ExplVar1 ExplVar2 ExplVar3
,reg DependentVar ExplVar1 ExplVar2 ExplVar4
等,要么终止为reg DependentVar ExplVar1 ExplVar2
。包含多个解释性因素的分支也会被剪切-例如reg DependentVar ExplVar1 ExplVar1
或reg DependentVar ExplVar1 ExplVar2 ExplVar1
。因此,总的来说,我设计了一种模型选择方法。我知道已经存在的模型选择命令,但是需要一个针对给定数据集的特定属性定制的命令。
答案 0 :(得分:5)
将rapply
与combn
一起考虑。下面演示了5个解释变量。对于实际用例:
paste0("ExplVar", 1:5)
(可能使用names(df)
)1:5
替换为1:60
,其中包括简单的一个变量回归作为 apply 系列的递归成员,rapply
(我梦ed以求的SO答案会尘土飞扬!)将构建线性公式的字符向量从嵌套列表中,然后可以使用lm
进行迭代:
expvar_list <- lapply(1:5, function(x) combn(paste0("ExplVar", 1:5), x, simplify=FALSE))
formulas_list <- rapply(expvar_list, function(x) paste("DepVar ~", paste(x, collapse="+")))
formulas_list
# [1] "DepVar ~ ExplVar1"
# [2] "DepVar ~ ExplVar2"
# [3] "DepVar ~ ExplVar3"
# [4] "DepVar ~ ExplVar4"
# [5] "DepVar ~ ExplVar5"
# [6] "DepVar ~ ExplVar1+ExplVar2"
# [7] "DepVar ~ ExplVar1+ExplVar3"
# [8] "DepVar ~ ExplVar1+ExplVar4"
# [9] "DepVar ~ ExplVar1+ExplVar5"
# [10] "DepVar ~ ExplVar2+ExplVar3"
# [11] "DepVar ~ ExplVar2+ExplVar4"
# [12] "DepVar ~ ExplVar2+ExplVar5"
# [13] "DepVar ~ ExplVar3+ExplVar4"
# [14] "DepVar ~ ExplVar3+ExplVar5"
# [15] "DepVar ~ ExplVar4+ExplVar5"
# [16] "DepVar ~ ExplVar1+ExplVar2+ExplVar3"
# [17] "DepVar ~ ExplVar1+ExplVar2+ExplVar4"
# [18] "DepVar ~ ExplVar1+ExplVar2+ExplVar5"
# [19] "DepVar ~ ExplVar1+ExplVar3+ExplVar4"
# [20] "DepVar ~ ExplVar1+ExplVar3+ExplVar5"
# [21] "DepVar ~ ExplVar1+ExplVar4+ExplVar5"
# [22] "DepVar ~ ExplVar2+ExplVar3+ExplVar4"
# [23] "DepVar ~ ExplVar2+ExplVar3+ExplVar5"
# [24] "DepVar ~ ExplVar2+ExplVar4+ExplVar5"
# [25] "DepVar ~ ExplVar3+ExplVar4+ExplVar5"
# [26] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar4"
# [27] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar5"
# [28] "DepVar ~ ExplVar1+ExplVar2+ExplVar4+ExplVar5"
# [29] "DepVar ~ ExplVar1+ExplVar3+ExplVar4+ExplVar5"
# [30] "DepVar ~ ExplVar2+ExplVar3+ExplVar4+ExplVar5"
# [31] "DepVar ~ ExplVar1+ExplVar2+ExplVar3+ExplVar4+ExplVar5"
models_list <- lapply(formulas_list, function(x) summary(lm(as.formula(x), mydata)))
注意:请注意,不同长度的60个变量的组合数量非常多!