【问题标题】:Looping over variables to generate interaction variables循环变量以生成交互变量
【发布时间】:2022-11-30 03:37:56
【问题描述】:
对于 var1 中的每个变量,我希望它与 var2 中的每个变量交互。在 Stata 中,我可以简单地使用嵌套的 foreach 循环来执行此操作,但我无法在 R 中复制逻辑。
统计代码:
foreach var1 in
gdp_g gdp_g_l GPCP_g GPCP_g_l
{;
foreach var2 in
polity2l y_0 ethfrac Oil lmtnest
{;
quietly gen `var1'_`var2' = `var1'*`var2';
};
};
不确定 R 中的直觉。
vars1 <- list("gdp_g", "gdp_g_l", "GPCP_g", "GPCP_g_l")
vars2 <- list("polity2l", "y_0", "ethfrac", "Oil", "lmtnest")
multiplyit <- function(x){
paste(x, collapse = "*")
}
for(i in 1:length(vars1)) {
for(j in 1:length(var2)){
vars1[i]*vars2[j]
}
}
也许我需要使用公式来乘以每个唯一的变量组合。
【问题讨论】:
-
如果您包含一个简单的 reproducible example 以及可用于测试和验证可能的解决方案的示例输入和所需的输出,则可以更轻松地为您提供帮助。也许您正在寻找expand.grid?您期望结果的结构如何?
标签:
r
loops
foreach
formula
interaction
【解决方案1】:
您可以使用 combinat 包中的 combn 来获取所有对的唯一组合,然后使用 paste 折叠由 * 分隔的所有字符串
> library(combinat)
> combn(c(vars1, vars2), 2, fun = paste, collapse="*")
[1] "gdp_g*gdp_g_l" "gdp_g*GPCP_g" "gdp_g*GPCP_g_l" "gdp_g*polity2l" "gdp_g*y_0"
[6] "gdp_g*ethfrac" "gdp_g*Oil" "gdp_g*lmtnest" "gdp_g_l*GPCP_g" "gdp_g_l*GPCP_g_l"
[11] "gdp_g_l*polity2l" "gdp_g_l*y_0" "gdp_g_l*ethfrac" "gdp_g_l*Oil" "gdp_g_l*lmtnest"
[16] "GPCP_g*GPCP_g_l" "GPCP_g*polity2l" "GPCP_g*y_0" "GPCP_g*ethfrac" "GPCP_g*Oil"
[21] "GPCP_g*lmtnest" "GPCP_g_l*polity2l" "GPCP_g_l*y_0" "GPCP_g_l*ethfrac" "GPCP_g_l*Oil"
[26] "GPCP_g_l*lmtnest" "polity2l*y_0" "polity2l*ethfrac" "polity2l*Oil" "polity2l*lmtnest"
[31] "y_0*ethfrac" "y_0*Oil" "y_0*lmtnest" "ethfrac*Oil" "ethfrac*lmtnest"
[36] "Oil*lmtnest"