gpt4 book ai didi

r - 在 R 中向量化 rep 和 seq

转载 作者:行者123 更新时间:2023-12-04 11:50:57 26 4
gpt4 key购买 nike

我正在努力完成两件事。首先,如果我有一个向量 1:5 我想得到一个矩阵(或两个向量),表示这些元素的唯一组合,包括两倍相同的数字但不包括重复。

现在我可以使用矩阵来做到这一点:

foo <- matrix(1:5,5,5)
cbind(foo[upper.tri(foo,diag=TRUE)],foo[lower.tri(foo,diag=TRUE)])
[,1] [,2]
[1,] 1 1
[2,] 1 2
[3,] 2 3
[4,] 1 4
[5,] 2 5
[6,] 3 2
[7,] 1 3
[8,] 2 4
[9,] 3 5
[10,] 4 3
[11,] 1 4
[12,] 2 5
[13,] 3 4
[14,] 4 5
[15,] 5 5

但必须有一个更简单的方法。我试图在 Vectorize 上使用 seq 但这给了我一个错误:
cbind(Vectorize(seq,"from")(1:5,5),Vectorize(seq,"to")(5,1:5))
Error in Vectorize(seq, "from") :
must specify formal argument names to vectorize

我想要做的第二件事是,如果我有一个包含向量的列表 bar ,来获取一个包含重复的列表元素的向量,该元素的数量等于该元素中的元素数。我可以这样做:
unlist(apply(rbind(1:length(bar),sapply(bar,length)),2,function(x)rep(x[1],x[2])))
[1] 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3

但同样必须有更简单的方法。我在这里再次尝试了 Vectorize 但出现了同样的错误:
Vectorize(rep,"each")(1:length(bar),each=sapply(bar,length))
in Vectorize(rep, "each") :
must specify formal argument names to vectorize

最佳答案

对于您的第一个问题:base 中的简单 combn() 函数怎么样:

> combn(1:5,2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 2 2 2 3 3 4
[2,] 2 3 4 5 3 4 5 4 5 5

如果你需要一个矩阵排列你制作的矩阵,只需用 t() 转置它,就像 t(combn(1:5,2))
注意:这不会让您返回 seq 中重复元素的组合,但您可以轻松地将它们添加到矩阵中。

关于r - 在 R 中向量化 rep 和 seq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com