将向量中的唯一值对相乘并对结果求和

时间:2015-08-08 10:59:15

标签: r

我想乘以然后求和向量的唯一对,不包括由相同元素组成的对,以便c(1:4)

(1*2) + (1*3) + (1*4) + (2*3) + (2*4) + (3*4) == 35

以下代码适用于上述示例:

x <- c(1:4)
bar <- NULL
for( i in 1:length(x)) { bar <- c( bar, i * c((i+1) : length(x)))}
sum(bar[ 1 : (length(bar) - 2)])

但是,我的实际数据是有理数的向量,而不是整数,所以循环的(i+1)部分不起作用。有没有办法在i之后查看集合的下一个元素,例如j,以便我可以写i * c((j : length(x))

我理解for循环通常不是最有效的方法,但我想不出如何通过apply等来实现这一点。例如,这也是受欢迎的。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

循环的替代方法是使用combn并使用FUN参数乘以组合。然后sum结果:

sum(combn(x = 1:4, m = 2, FUN = function(x) x[1] * x[2]))
# [1] 35

根据@bgoldst的建议,更好地在prod中使用FUN

sum(combn(x = 1:4, m = 2, FUN = prod))