data.frame 中所有变量对的元素乘法求和

问题描述

除了 crossprod 之外,他们是否还有其他任何 BASE 函数来简单地为我的下面的 data.frame 执行 (.1*.3)+(.2*.4)输出 .11

注意:这是一个玩具示例,data.frame 可以有任意数量的列。

x = data.frame(a = c(.1,.2),b = c(.3,.4))

# Desired Output
(.1*.3)+(.2*.4) #= .11

crossprod(as.matrix(x))

# Current output
     a    b
a 0.05 0.11
b 0.11 0.25

解决方法

c(do.call("%*%",x))

[1] 0.11

甚至

x$a%*%x$b
,

我们可以使用Reduce

c(Reduce(`%*%`,x))
,

如果 x 是如您所示的 data.frame,您也可以在 tidyverse 中进行数学运算

x %>% rowwise() %>%
  mutate(c = prod(c_across(everything()))) %>%
  ungroup() %>%
  summarise(c = sum(c)) %>% 
  pull(c)

[1] 0.11
,

试试

> sum(do.call("*",x))
[1] 0.11