假设我有一个向量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")我希望代码避免任何循环,因为我需要对一个大数据运行它。
发布于 2015-04-15 12:59:49
将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"https://stackoverflow.com/questions/29647550
复制相似问题