首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求两列乘积之和

求两列乘积之和
EN

Stack Overflow用户
提问于 2016-09-12 02:12:16
回答 2查看 1.5K关注 0票数 2

有人能解释一下我下面R函数的操作顺序是怎么错的吗?我希望每一行都乘一乘,然后把结果加起来,但我得到的答案却大不相同。

代码语言:javascript
复制
qqq<-data.frame(c(1,2,3),c(4,5,6))
library(dplyr)
qqq%>%sum(.[,1]*.[,2]) #returns: 53

# answer I expected: 1*4+2*5+3*6 = 32
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-12 02:16:52

我们可以使用Reduce获得逐行产品,然后执行sum

代码语言:javascript
复制
qqq %>%
     Reduce(`*`, .) %>%
     sum
#[1] 32

或者正如注释中提到的@eipi,使用{}也可以工作。

代码语言:javascript
复制
qqq %>%
   {.[,1]*.[,2]} %>%
   sum

或使用do (来自@thelatemail)

代码语言:javascript
复制
qqq %>% 
    do(.[1]*.[2]) %>%
    sum
票数 3
EN

Stack Overflow用户

发布于 2016-09-12 04:34:17

我想有一个简单的例子解释了这里发生了什么,即使我不知道为什么会发生在底层代码中:

整个数据集将传递给sum操作,然后将其与sum操作中的表达式相加:

在最简单的例子中,等效于sum(data.frame(1:3))

代码语言:javascript
复制
data.frame(1:3) %>% sum()
#[1] 6

然后6+ 6:

代码语言:javascript
复制
data.frame(1:3) %>% sum(.[1])
#[1] 12

现在,在输入数据集之和为12下面,结果是12 + 6:

代码语言:javascript
复制
data.frame(1:3,1:3) %>% sum(.[1])
#[1] 18

将这两列相加得到12 +6+ 6:

代码语言:javascript
复制
data.frame(1:3,1:3) %>% sum(.[1],.[2])
#[1] 24

加上乘法得到12 +和(1:3* 1:3) = 12 + 14

代码语言:javascript
复制
data.frame(1:3,1:3) %>% sum(.[1]*.[2])
#[1] 26
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39442534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档