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)])

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

我知道 for 循环通常不是最有效的方法,但我想不出如何通过 apply 等实现这一点。欢迎提供示例, 也。感谢您的帮助。

最佳答案

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

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))

关于r - 将向量中的唯一值对相乘并对结果求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892376/

相关文章:

删除字符串中第一个 'backslash' 之后的所有内容

r - ggplot 躲避条形图

r - 如何在 quantmod 包中创建技术指标

r - 在 R 中获取每个多边形的多数像素值的区域统计?

r - 选择每隔 n 行的数据框并添加到 R 中的数据框列表

r - 如何从 r 中将变量传递给 sed

r - 相当于MATLAB的hold on

r - Shiny - 相对于 mainPanel() 调整 sidebarPanel() 的宽度

r - 调用父 Shiny 服务器中的 react 数据集的 Shiny 模块

r - 在 R 中向量化二维函数