Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
R 将向量中的唯一值对相乘,并对结果求和_R - Fatal编程技术网

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

R 将向量中的唯一值对相乘,并对结果求和,r,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)]) x循环的替代方法是使用combn并使用FUN

我想乘以向量的唯一对,然后求和,不包括由相同元素组成的对,例如对于
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)])

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

sum(combn(x = 1:4, m = 2, FUN = function(x) x[1] * x[2]))
# [1] 35
按照@bgoldst的建议,最好在
FUN
中使用
prod

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

如果您想扩展以封装“唯一对”注释,您可以这样做:FUN=function(x)x[1]*x[2]*(x[1]!=x[2])好的解决方案,+1。我只建议将
函数(x)x[1]*x[2]
替换为,这样做也是一样的。@RichAtMango我不太确定我是否明白你的意思。看看
combn(1:4,2)
@henrik看看
combn(c(1,2,3,3,4),2)
。最初的问题是关于“唯一值”,那么这个结果的第2列和第3列是否应该被计数两次呢?@RichAtMango现在我听你的。谢谢你的澄清。我(可能错误地)假设了输入向量中的唯一元素(让OP澄清)。如果不是这样,你的建议是有道理的。或者只需将输入向量包装在
unique
?可能的重复:。除了最后的(琐碎的)
sum
,OP似乎也在寻找失败循环(XY问题)的解释。