我想乘以然后求和向量的唯一对,不包括由相同元素组成的对,以便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
等来实现这一点。例如,这也是受欢迎的。谢谢你的帮助。
答案 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))