动态更改R中变量名的一部分

Dynamically change part of variable name in R

我正在尝试自动化一些 post-hoc 分析,但我会尝试用一个比喻来解释我自己,我相信这个比喻会说明我正在尝试做的事情。

假设我有两个列表中的字符串列表,第一个列表中有名称列表,另一个列表中有形容词列表:

list1 <- c("apt", "farm", "basement", "lodge")
list2 <- c("tiny", "noisy")

我们也假设我有一个数据框,其中包含一堆数据,我将这些数据命名为类似这样的名称,因为它们是之前一些线性分析的结果。

> head(df)
     qt[apt_tiny,Intercept]  qt[apt_noisy,Intercept]   qt[farm_tiny,Intercept]
1    4.196321                -0.4477012                -1.0822793
2    3.231220                -0.4237787                -1.1433449 
3    2.304687                -0.3149331                -0.9245896 
4    2.768691                -0.1537728                -0.9925387
5    3.771648                -0.1109647                -0.9298861
6    3.370368                -0.2579591                -1.0849262

and so on...

现在,我要做的是进行一些自动操作,其中前面列表中的字符串在进入 for 循环时会动态变化。我列出了所有不同的组合,并将其命名为 distinct。现在我正在尝试做这样的事情:

for (i in 1:nrow(distinct)){
var1[[i]] <- list1[[i]]
var2[[i]] <- list2[[i]]

#this being the insertable name part for the rest of the variables and parts of variable, 
#i'll put it inside %var[[i]]% for the sake of the explanation.

%var1[[i]]%_%var2[[i]]%_INT <- df$`qt[%var1[[i]]%_%var2[[i]]%,Intercept]`+ df$`qt[%var1[[i]]%,Intercept]`

}

这里对我来说困难的是 %var1[[i]]% 同时在一个变量中并且作为数据框中列的名称。

如有任何帮助,我们将不胜感激。

您不能使用 $ 提取具有字符变量的列值。所以 df$`qt[%var1[[i]]%_%var2[[i]]%,Intercept] 将不起作用。

使用 sprintf 创建列的名称并使用 [[ 提取它。例如,要将 "qt[apt_tiny,Intercept]" 构造为列名,您可以执行以下操作:

i <- 1
sprintf('qt[%s_%s,Intercept]', list1[i], list2[i])
#[1] "qt[apt_tiny,Intercept]"

现在使用 [[df

中对该列进行子集化
df[[sprintf('qt[%s_%s,Intercept]', list1[i], list2[i])]] 

您可以对其他列执行相同的操作。