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

use pmap() to calculate row means of several columns

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

mtcars %>% 
  mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>% 
  select(comp_var, vs, am, cyl)

在上面的例子中,comp_var等于该行中vs的值,而不是给定行中三个变量的平均值。

我知道我可以使用 ...

获得 comp_var 的准确结果
mtcars %>% 
  rowwise() %>% 
    mutate(comp_var = mean(c(vs, am, cyl))) %>% 
    select(comp_var, vs, am, cyl) %>% 
  ungroup()

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

我们需要将 meanx 参数的参数连接为

x: An R object. Currently there are methods for numeric/logical vectors and date, date-time and time interval objects. Complex vectors are allowed for ‘trim = 0’, only.

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

mean(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)

-检查 rowwise 输出

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