【问题标题】:Generate an accumulated array of strings from a string array从字符串数组生成字符串的累积数组
【发布时间】:2016-05-06 10:05:50
【问题描述】:
我有这个:
str <- c("var1", "var2", "var3")
我想生成以下字符串数组:
"c ~ var1"
"c ~ var1 + var2"
"c ~ var1 + var2 + var3"
我知道我可以对其进行硬编码,因为只有 3 个字符串,但我想要一个用于任意大小向量的方法。有没有简单的方法来实现这一点?
【问题讨论】:
标签:
r
string
concatenation
string-concatenation
【解决方案1】:
只是使用“公式”对象的另一种选择:
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>
如果真的需要一个“字符”对象,那么我们可以在上面使用lapply(., deparse),或者如果最终目标是一个公式,而不是lapply,我们可以循环使用for 来保留原始的“环境” .
【解决方案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】:
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"
注意尽量避免将变量分配给现有函数的名称(例如str -- 查看?str)
【解决方案4】:
你可以试试这个:
out <- vector()
out[1] <- paste("c ~",str[1])
for (i in 2:length(str)) out[i] <- paste(out[i-1], "+", str[i])