有人能解释一下我下面R函数的操作顺序是怎么错的吗?我希望每一行都乘一乘,然后把结果加起来,但我得到的答案却大不相同。
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发布于 2016-09-12 02:16:52
我们可以使用Reduce获得逐行产品,然后执行sum
qqq %>%
Reduce(`*`, .) %>%
sum
#[1] 32或者正如注释中提到的@eipi,使用{}也可以工作。
qqq %>%
{.[,1]*.[,2]} %>%
sum或使用do (来自@thelatemail)
qqq %>%
do(.[1]*.[2]) %>%
sum发布于 2016-09-12 04:34:17
我想有一个简单的例子解释了这里发生了什么,即使我不知道为什么会发生在底层代码中:
整个数据集将传递给sum操作,然后将其与sum操作中的表达式相加:
在最简单的例子中,等效于sum(data.frame(1:3)):
data.frame(1:3) %>% sum()
#[1] 6然后6+ 6:
data.frame(1:3) %>% sum(.[1])
#[1] 12现在,在输入数据集之和为12下面,结果是12 + 6:
data.frame(1:3,1:3) %>% sum(.[1])
#[1] 18将这两列相加得到12 +6+ 6:
data.frame(1:3,1:3) %>% sum(.[1],.[2])
#[1] 24加上乘法得到12 +和(1:3* 1:3) = 12 + 14
data.frame(1:3,1:3) %>% sum(.[1]*.[2])
#[1] 26https://stackoverflow.com/questions/39442534
复制相似问题