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

动态更改R中变量名的一部分,r,dynamic,rename,naming,R,Dynamic,Rename,Naming,我正在尝试自动化一些事后分析,但我会尝试用一个隐喻来解释我自己,我相信这会说明我正在尝试做什么 假设我有两个列表中的字符串列表,第一个列表中有名称列表,另一个列表中有形容词列表: list1 <- c("apt", "farm", "basement", "lodge") list2 <- c("tiny", "noisy") 现在,我要做的是进行一些自动操作,其

我正在尝试自动化一些事后分析,但我会尝试用一个隐喻来解释我自己,我相信这会说明我正在尝试做什么

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

list1 <- c("apt", "farm", "basement", "lodge")
list2 <- c("tiny", "noisy")
现在,我要做的是进行一些自动操作,其中前面列表中的字符串在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]`

}
for(1中的i:nrow(不同)){

var1[[i]]您不能使用
$
提取带有字符变量的列值。因此df$`qt[%var1[[i]]%\u%var2[[i]]%,Intercept]将不起作用

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

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

您也可以对其他专栏进行同样的操作。

我明白了,我将尝试按照您的建议使用
sprintf
和子集。谢谢!
i <- 1
sprintf('qt[%s_%s,Intercept]', list1[i], list2[i])
#[1] "qt[apt_tiny,Intercept]"
df[[sprintf('qt[%s_%s,Intercept]', list1[i], list2[i])]]