从字符串数组生成累积的字符串数组

Generate an accumulated array of strings from a string array

我有这个:

str <- c("var1", "var2", "var3")

我想生成以下字符串数组:

"c ~ var1"
"c ~ var1 + var2"
"c ~ var1 + var2 + var3"

我知道我可以对此进行硬编码,因为只有 3 个字符串,但我想要一个用于任意大小向量的方法。有没有简单的方法可以做到这一点?

你可以试试这个:

out <- vector()
out[1] <- paste("c ~",str[1])
for (i in 2:length(str)) out[i] <- paste(out[i-1], "+", str[i])
x <- c("var1", "var2", "var3")

for (i in seq_along(x)) {
  vars <- paste(x[1:i], collapse = " + ")
  print(paste("c ~", vars))
}

# [1] "c ~ var1"
# [1] "c ~ var1 + var2"
# [1] "c ~ var1 + var2 + var3"

N.B。尽量避免将变量分配给现有函数的名称(例如 str -- 查看 ?str

尝试:

> lapply(sapply(1:length(str), seq), function(x){ 
      paste0("c ~ ",paste(str[x],collapse=" + ")) })
[[1]]
[1] "c ~ var1"

[[2]]
[1] "c ~ var1 + var2"

[[3]]
[1] "c ~ var1 + var2 + var3"

您可以将lapply更改为sapply以获得字符向量。

只是使用 "formula" 个对象的替代方法:

lapply(Reduce(function(x, y) setNames(data.frame(x, y), 
                                      c(names(x), y)), 
              str, init = c(c = "c"), acc = TRUE)[-1L], 
       formula)
#[[1]]
#c ~ var1
#<environment: 0x0321adcc>
#
#[[2]]
#c ~ var1 + var2
#<environment: 0x0321adcc>
#
#[[3]]
#c ~ var1 + var2 + var3
#<environment: 0x0321adcc>

如果确实需要 "character" 对象,那么我们可以在上面 lapply(., deparse) 或者如果最终目标是公式,而不是 lapply 我们可以循环 for保留原来的"environment"。