首页 > 解决方案 > purrr 映射而不是应用

问题描述

我正在尝试在我的代码中加入更多管道。通常,我必须分解管道才能使用 apply 函数。然后我发现了咕噜声。但是,我不清楚它是如何工作的。这是我想要的,也是我尝试过的。主要问题是我想要逐行计算。

想:

apply(mtcars,1,function(x) which.max(x))

有:

mtcars %>% map_dbl(which.max) 

标签: rpurrr

解决方案


如果我们需要按行排列,则使用pmap. 根据?pmap

...请注意,数据框是一个非常重要的特殊情况,在这种情况下 pmap() 和 pwalk() 将函数 .f 应用于每一行。map_dfr()、pmap_dfr() 和 map2_dfc()、pmap_dfc() 分别返回由行绑定和列绑定创建的数据帧。...

pmap_int(mtcars, ~ which.max(c(...)))
#[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3

此外,在 中base R,这可以很容易地完成并有效地完成max.col

max.col(mtcars, "first")
#[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 4 4 3

map使用类似于lapply/sapply循环遍历每一列并将函数应用于该列的位置。所以,它会类似于

apply(mtcars, 2, which.max)

推荐阅读