假设我有一个向量c("m1","m2","m3","m4")
我需要生成各种按时间顺序排列的序列。 上面的输出应该看起来像
c("m1","m1 m2","m1 m2 m3","m1 m2 m3 m4","m2","m2 m3","m2 m3 m4","m3","m3 m4","m4")
我希望代码避免任何循环,因为我需要为大数据运行它。
答案 0 :(得分:2)
将combn
与指定的功能一起使用,包括单身和排序:
Paste <- function(x) paste(m[x[1]:x[2]], collapse = " ")
sort(c(m, combn(length(m), 2, FUN = Paste)))
,并提供:
[1] "m1" "m1 m2" "m1 m2 m3" "m1 m2 m3 m4" "m2"
[6] "m2 m3" "m2 m3 m4" "m3" "m3 m4" "m4"
如果订单无关紧要,请省略sort
。
注意:如果我们更喜欢一个字符向量列表(而不是粘贴字符串的向量),那么这个稍微简单的代码会提供它未分类:
enlist <- function(x) list(m[x[1]:x[2]])
L <- c(m, combn(length(m), 2, FUN = enlist))
,并提供:
> str(L)
List of 10
$ : chr "m1"
$ : chr "m2"
$ : chr "m3"
$ : chr "m4"
$ : chr [1:2] "m1" "m2"
$ : chr [1:3] "m1" "m2" "m3"
$ : chr [1:4] "m1" "m2" "m3" "m4"
$ : chr [1:2] "m2" "m3"
$ : chr [1:3] "m2" "m3" "m4"
$ : chr [1:2] "m3" "m4"