我有这个:
str <- c("var1", "var2", "var3")
我想生成以下字符串数组:
"c ~ var1"
"c ~ var1 + var2"
"c ~ var1 + var2 + var3"
我知道我可以硬编码,因为只有3个字符串,但我想要一个任意大小的矢量方法。有没有一种简单的方法来实现这一目标?
答案 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 ;.