For 循环:将索引粘贴到字符串中

For loop: paste index into string

这可能会让您觉得奇怪,但我想准确地实现以下目标:我想将列表的索引粘贴到包含对该列表子集的字符串引用的字符串中。

举例说明:


l1 <- list(a = 1, b = 2)
l2 <- list(a = 3, b = 4)
l <- list(l1,l2)

X_l <- vector("list", length = length(l))

for (i in 1:length(l)) {
  
 X_l[[i]] = "l[[  #insert index number as character# ]]$l_1*a"
  
}

最后,我想要这样的东西:


X_l_wanted <- list("l[[1]]$l_1*a","l[2]]$l_1*a")

在循环中尝试 paste0()。这就是连接链的方式。这是对您的代码稍作更改的解决方案:

#Data
l1 <- list(a = 1, b = 2)
l2 <- list(a = 3, b = 4)
l <- list(l1,l2)
#List
X_l <- vector("list", length = length(l))
#Loop
for (i in 1:length(l)) {
  
  #Code
  X_l[[i]] = paste0('l[[',i,']]$l_1*a')
  
}

输出:

X_l

[[1]]
[1] "l[[1]]$l_1*a"

[[2]]
[1] "l[[2]]$l_1*a"

或者您可以使用 lapply()

library(glue)
X_l <- lapply(1:length(l), function(i)glue("l[[{i}]]$l_l*a"))
X_l
# [[1]]
# l[[1]]$l_l*a

# [[2]]
# l[[2]]$l_l*a

可以直接使用sprintf/paste0:

sprintf('l[[%d]]$l_1*a', seq_along(l))
#[1] "l[[1]]$l_1*a" "l[[2]]$l_1*a"

如果您希望最终输出为列表:

as.list(sprintf('l[[%d]$l_1*a', seq_along(l)))

#[[1]]
#[1] "l[[1]]$l_1*a"

#[[2]]
#[1] "l[[2]]$l_1*a"

使用paste0

paste0('l[[', seq_along(l), ']]$l_1*a')