Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从R中的数组中提取“N”大小的序列_Arrays_R_Performance_Subset - Fatal编程技术网

Arrays 从R中的数组中提取“N”大小的序列

Arrays 从R中的数组中提取“N”大小的序列,arrays,r,performance,subset,Arrays,R,Performance,Subset,假设我有以下数组: a <- sample(letters,100,replace=TRUE) 然后假设这些字母按顺序排列,我想从该数组中提取所有可能的“n”大小的序列。例如: 对于n=2,我会做:粘贴0a[1:99],->,a[2:100] 对于n=3,我会做:粘贴0a[1:98],->,a[2:99],->,a[3:100] 你明白了。现在,我的目标是创建一个函数,将n作为输入,并从数组a返回给定长度的对应序列集 我能够使用循环和所有这些来完成它,但我希望有一个高性能的单行程序 我对

假设我有以下数组:

a <- sample(letters,100,replace=TRUE)
然后假设这些字母按顺序排列,我想从该数组中提取所有可能的“n”大小的序列。例如:

对于n=2,我会做:粘贴0a[1:99],->,a[2:100]

对于n=3,我会做:粘贴0a[1:98],->,a[2:99],->,a[3:100]

你明白了。现在,我的目标是创建一个函数,将n作为输入,并从数组a返回给定长度的对应序列集

我能够使用循环和所有这些来完成它,但我希望有一个高性能的单行程序

我对R有点陌生,所以我不知道所有现有的函数。

您可以使用嵌入。对于embeda,3,这给出了一个包含列的矩阵

a[3:100] a[2:99] a[1:98] 按这个顺序

要反转列顺序,请使用矩阵语法m[rows,cols]:

如果希望在列之间打印箭头,则

do.call(paste, c(split(res, col(res)), sep = " -> "))
这是一种方法。这可能比applyres,1,something,在性能方面更好,因为这是矢量化的,而apply将在行上循环

正如@DavidArenburg所指出的,这同样可以通过data.table实现:

library(data.table)
do.call(paste, c(shift(a, 2:0), sep = " -> "))[-(1:2)]
shift就像嵌入,只是它

返回一个列表而不是一个矩阵,因此我们不需要按列拆分来粘贴 缺少值的焊盘可以保持全长,因此我们需要以-1:2的比例下降 我本想说一些关于如何在R中找到模糊函数的有用信息,但对于如何找到嵌入,我几乎一无所知。也许

转到任何HTML帮助页面 单击底部的索引超链接 阅读每一页 ?

您可以使用嵌入。对于embeda,3,这给出了一个包含列的矩阵

a[3:100] a[2:99] a[1:98] 按这个顺序

要反转列顺序,请使用矩阵语法m[rows,cols]:

如果希望在列之间打印箭头,则

do.call(paste, c(split(res, col(res)), sep = " -> "))
这是一种方法。这可能比applyres,1,something,在性能方面更好,因为这是矢量化的,而apply将在行上循环

正如@DavidArenburg所指出的,这同样可以通过data.table实现:

library(data.table)
do.call(paste, c(shift(a, 2:0), sep = " -> "))[-(1:2)]
shift就像嵌入,只是它

返回一个列表而不是一个矩阵,因此我们不需要按列拆分来粘贴 缺少值的焊盘可以保持全长,因此我们需要以-1:2的比例下降 我本想说一些关于如何在R中找到模糊函数的有用信息,但对于如何找到嵌入,我几乎一无所知。也许

转到任何HTML帮助页面 单击底部的索引超链接 阅读每一页
?

试试看。。。用一个奇怪的名字来模糊函数,但似乎正是这样做的。@Frank我起初以为它不工作,但后来我从最后一列开始阅读输出,结果是正确的,我只需要找出如何从最后一列到第一列组装每一行,并将它们放在一个阵列中。之后,您可以颠倒列顺序,如embeda,n[,n:1]@Frank。我将尝试使用apply函数分别粘贴所有行,然后将它们移动到平面1D数组中。除非你有更好的解决方案,否则你应该把它作为一个答案。。。用一个奇怪的名字来模糊函数,但似乎正是这样做的。@Frank我起初以为它不工作,但后来我从最后一列开始阅读输出,结果是正确的,我只需要找出如何从最后一列到第一列组装每一行,并将它们放在一个阵列中。之后,您可以颠倒列顺序,如embeda,n[,n:1]@Frank。我将尝试使用apply函数分别粘贴所有行,然后将它们移动到平面1D数组中。除非你有更好的解决方案,否则你应该把它作为回答发帖谢谢@David,hanks@David补充道