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

时间:2016-01-28 20:36:31

标签: r string concatenation string-concatenation

我有这个:

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

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

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

我知道我可以硬编码,因为只有3个字符串,但我想要一个任意大小的矢量方法。有没有一种简单的方法来实现这一目标?

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

尝试:

> 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以获取字符向量。

答案 3 :(得分:1)

使用&#34;公式&#34;对象:

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>

如果是&#34;字符&#34;对象确实是必需的,那么我们可以在上面lapply(., deparse)或者如果最终目标是公式,而不是lapply我们可以使用for循环以保留原始&#34;环境& #34 ;.