我正在努力更好地了解pmap()
在数据框架中的工作原理,并且在将pmap()
应用于来自多个列的计算方法时,我得到了令人惊讶的结果。
mtcars %>%
mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>%
select(comp_var, vs, am, cyl)
在上面的例子中,comp_var
等于其行中vs的值,而不是给定行中三个变量的平均值。
我知道我可以使用... {/ 1>获得comp_var
的准确结果
mtcars %>%
rowwise() %>%
mutate(comp_var = mean(c(vs, am, cyl))) %>%
select(comp_var, vs, am, cyl) %>%
ungroup()
...但我想了解在这种情况下如何应用pmap()
。
答案 0 :(得分:5)
我们需要将x
中mean
参数的参数连接为
x:一个R对象。目前有数字/逻辑方法 矢量和日期,日期时间和时间间隔对象。 复数向量仅允许'trim = 0'。
因此,如果我们传递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