这不是问题的重复,例如像 apply with purrr 这样的逐行迭代
我了解如何使用pmap()
对数据框进行逐行操作:
library(tidyverse)
df1 = tribble(~col_1, ~col_2, ~col_3,
1, 5, 12,
9, 3, 3,
6, 10, 7)
foo = function(col_1, col_2, col_3) {
mean(c(col_1, col_2, col_3))
}
df1 %>% pmap_dbl(foo)
这给出了foo
应用于每一行的函数:
[1] 6.000000 5.000000 7.666667
但是当我有多个列时,这会变得非常笨拙,因为我必须明确地传递它们。如果我说,我的数据框中有 8 列,df2
并且我想应用一个bar
可能涉及这些列中的每一列的函数怎么办?
set.seed(12345)
df2 = rnorm(n=24) %>% matrix(nrow=3) %>% as_tibble() %>%
setNames(c("col_1", "col_2", "col_3", "col_4", "col_5", "col_6", "col_7", "col_8"))
bar = function(col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_8) {
# imagine we do some complicated row-wise operation here
mean(c(col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_8))
}
df2 %>% pmap_dbl(bar)
给出:
[1] 0.45085420 0.02639697 -0.28121651
这显然是不够的——我必须bar
为每一列添加一个新参数。输入很多,它使代码更不可读且更脆弱。似乎应该有一种方法让它接受一个参数x
,然后访问我想要的变量x$col_1
等。或者无论如何比上面更优雅的东西。有什么方法可以使用 purrr 清理此代码?