首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解“`purrr::pmap`”,并在R中的`pmap`‘中包含一个数据

理解“`purrr::pmap`”,并在R中的`pmap`‘中包含一个数据
EN

Stack Overflow用户
提问于 2022-10-28 10:45:50
回答 3查看 79关注 0票数 2

我想用pmap计算前3列的总和。

代码语言:javascript
复制
library(tidyverse)

mtcars %>% 
  mutate(new = pmap(select(., 1:3), ~ sum(.))) # FAILS

mtcars %>% 
  mutate(new = pmap(., ~ sum(.[1:3]))) # FAILS

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb new
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4  NA
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4  NA
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1  NA

我知道如何用rowwiseRowSums来实现它,但是我想要一个pmap的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-28 10:54:51

pmap解决方案将是:

代码语言:javascript
复制
mtcars %>% 
  mutate(new = pmap(., ~ sum(..1, ..2, ..3)))

或者,海事组织稍微好一点:

代码语言:javascript
复制
mtcars %>% 
  mutate(new = pmap(select(., 1:3), sum)) 

mtcars %>% 
  mutate(new = pmap(select(., 1:3), ~ sum(...))) 

或者,事件更好,通过与across相结合

代码语言:javascript
复制
mtcars %>% 
  mutate(new = pmap(across(1:3), sum))
票数 2
EN

Stack Overflow用户

发布于 2022-10-28 11:12:27

为什么%>%会发生突变(new=pmap(选择(,1:3),~sum(.)失败?

在您的代码中,sum(.)等于sum(..1)。它只使用第一个变量,但是如果您想在函数调用中使用所有的3个变量,您可以将其修改为:

代码语言:javascript
复制
mtcars %>% mutate(new = pmap(select(., 1:3), ~ sum(c(...))))

只需将.替换为c(...)即可。

票数 3
EN

Stack Overflow用户

发布于 2022-10-28 10:57:12

我知道你说过你想要一个pmap解决方案,但是我最喜欢的避免慢速rowwise的方法是acrossapply的结合。

代码语言:javascript
复制
mtcars |>
  mutate(new = apply(across(1:3), 1, sum))

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb   new
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 187.0
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 187.0
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1 134.8
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 285.4
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 386.7
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 249.1
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74234246

复制
相关文章

相似问题

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