3

我试图更好地理解数据帧中的工作原理,当应用到来自多个列的计算均值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()在这种情况下应该如何应用。

4

1 回答 1

8

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

×: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)

-检查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
于 2018-05-08T19:00:24.303 回答