R 使用pmap()计算多个列的行平均值

R 使用pmap()计算多个列的行平均值,r,purrr,pmap,R,Purrr,Pmap,我试图更好地理解pmap()如何在数据帧中工作,当应用pmap()计算多个列的均值时,我得到了一个令人惊讶的结果 mtcars %>% mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>% select(comp_var, vs, am, cyl) 在上面的示例中,comp_var等于其行中vs的值,而不是给定行中三个变量的平均值 我知道我可以通过使用 mtcars %>% rowwise() %&

我试图更好地理解
pmap()
如何在数据帧中工作,当应用
pmap()
计算多个列的均值时,我得到了一个令人惊讶的结果

mtcars %>% 
  mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>% 
  select(comp_var, vs, am, cyl)
在上面的示例中,
comp_var
等于其行中vs的值,而不是给定行中三个变量的平均值

我知道我可以通过使用

mtcars %>% 
  rowwise() %>% 
    mutate(comp_var = mean(c(vs, am, cyl))) %>% 
    select(comp_var, vs, am, cyl) %>% 
  ungroup()

。。。但是我想了解在这种情况下应该如何应用
pmap()

我们需要将
mean
x
参数的参数连接为

x:一个R对象。目前有用于数字/逻辑的方法 向量和日期、日期时间和时间间隔对象。 仅“trim=0”允许使用复数向量

因此,如果我们传递像x1、x2、x3等参数,它将根据用法进入
参数

平均值(x,…)

例如

mean(5, 8) # x is 5
#[1] 5 
mean(8, 5) # x is 8
#[1] 8
mean(c(5, 8)) # x is a vector with 2 values
#[1] 6.5
rowwise
函数中,OP将元素连接到一个向量,而使用
pmap
mean
应用于第一个参数

out1 <- mtcars %>% 
         mutate(comp_var = pmap_dbl(list(vs, am, cyl), ~mean(c(...)))) %>% 
         dplyr::select(comp_var, vs, am, cyl)
提示:
表示(1,2,3)
返回是什么意思?
out2 <- mtcars %>% 
         rowwise() %>% 
         mutate(comp_var = mean(c(vs, am, cyl))) %>% 
         dplyr::select(comp_var, vs, am, cyl) %>% 
         ungroup()

all.equal(out1, out2, check.attributes = FALSE)
#[1] TRUE