假设我有以下数组:
a <- sample(letters,100,replace=TRUE)
然后假设这些字母按顺序排列,我想提取所有可能的&#39; n&#39;来自该数组的大小序列。例如:
对于n=2
,我会这样做:paste0(a[1:99],"->",a[2:100])
n=3
我愿意:paste0(a[1:98],"->",a[2:99],"->",a[3:100])
你明白了。现在,我的目标是创建一个函数,该函数将作为输入n
,并将从数组a
我能够使用循环和所有这些,但我希望有一个高性能的单线。
我对R有点新,所以我不知道所有现有功能。
答案 0 :(得分:3)
您可以使用embed
。对于embed(a, 3)
,这会给出一个带
a[3:100]
a[2:99]
a[1:98]
按此顺序。
要反转列顺序,请使用矩阵语法m[rows, cols]
:
res = embed(a, 3)[, 3:1]
如果您希望在列之间打印箭头,那么
do.call(paste, c(split(res, col(res)), sep = " -> "))
是一种方式。这可能比性能方面的apply(res, 1, something)
更好,因为这是向量化的,而apply
会在行上循环。
正如@DavidArenburg所指出的,这可以用data.table:
来完成library(data.table)
do.call(paste, c(shift(a, 2:0), sep = " -> "))[-(1:2)]
shift
与embed
类似,但不包括......
split
col
来粘贴-(1:2)
我希望能说一些有关如何在R中找到晦涩功能的有用信息,但对于如何找到embed
几乎是空白的。也许...
?