从字符串数组生成累积的字符串数组
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"。
我有这个:
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"。