R 中的简单组合数学
我希望分享一个 R 函数,用于查找单个向量的元素之间所有可能的唯一无向组合:
combi <- function(vec1)
{
si <- length(vec1)
first <- rep(vec1, (si-1):0)
secR <- rev(vec1)
second <- secR[sequence(1:(si-1))]
second <- rev(second)
combi <- matrix(cbind(first, second), ncol = 2)
return(combi)
}
并询问是否有更简单的方法来做到这一点? (我需要结果位于两列矩阵中)。
I wish to share an R function for finding all possible unique undirected combinations between elements of a single vector:
combi <- function(vec1)
{
si <- length(vec1)
first <- rep(vec1, (si-1):0)
secR <- rev(vec1)
second <- secR[sequence(1:(si-1))]
second <- rev(second)
combi <- matrix(cbind(first, second), ncol = 2)
return(combi)
}
and ask if there is a simpler way of doing this? (I need the result to be in a 2-column matrix).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
嗯,有一个内置的
combn
函数:不过,你的看起来更快,也许是因为
combn
正在尝试解决一个更普遍的问题(??):Well, there's a built-in
combn
function:Yours looks faster, though, perhaps because
combn
is trying to solve a more general problem (??):包
utils
中有一个基本的 R 函数combn
,据我所知,它给出了相同的(如果转置)结果。不同之处在于,combn
更灵活,因为它还可以计算除 2 之外的长度组合。使用基本 R
combn
:计算长度为 3 的组合:
There is a base R function
combn
in packageutils
which, as far as I can tell, gives identical (if transposed) results. The difference is thatcombn
is more flexible in the sense that it will also calculate combinations of length other than 2.Using the base R
combn
:Calculate combinations of length 3:
包
combinat
。用于组合、排列等的大量工具。package
combinat
. Great bunch of tools for combination, permutation, and all that.感谢您发帖。对性能进行了一些调整。
一个。在首先计算索引时,我使用了rep.int 或rep。
b.我用
代替了
c 。我用
而不是
Thanks for posting. A few tweaks for performance.
a. I used rep.int instead or rep, when figuring out the indices for first.
b. I used
instead of
c. I used
instead of