【发布时间】:2018-07-14 10:35:09
【问题描述】:
考虑以下 tibble 和以下向量:
library(tidyverse)
a <- tibble(val1 = 10:15, val2 = 20:25)
params <- 1:3
我还有一个函数myfun,它接受一个任意长度的向量和一个整数作为输入,并返回一个相同长度的向量。出于演示目的,您可以考虑
myfun <- function(x, k) dplyr::lag(x, k)
我想创建以下内容:对于 a 中的每一列和 params 中的每个元素,我想创建一个由 myfun(col, params[i]) 给出的新列。
在上面的玩具示例中,例如可以这样实现:
a %>% mutate_at(1:2, funs(run1 = myfun), k = params[1]) %>%
mutate_at(1:2, funs(run2 = myfun), k = params[2]) %>%
mutate_at(1:2, funs(run3 = myfun), k = params[3])
有没有更优雅的方法来做到这一点?如果 params 很长,那么这个解决方案就变得不可行。当然可以使用 for 循环来做到这一点,但我认为在 tidyverse 中可能有一个解决方案(也许使用purrr::map?)
谢谢!
【问题讨论】: