【发布时间】:2019-12-16 11:23:01
【问题描述】:
我经常使用列表列表将函数(通常是模型调用)应用于参数网格。
这是一个以paste为终极功能的例子:
library(tidyverse) #purrr
a=c("A", "B", "C") %>% set_names %>% map(function(x){
c("m0", "m1") %>% set_names %>% map(function(y){
c("absolute", "relative") %>% set_names %>% map(function(z){
paste(x,y,z)
})
})
})
a$A$m0$absolute #exact expected output
我正在寻找一种通过更简单的调用获得完全相同结果的方法,可能是使用cross 或expand.grid 和pmap 或at_depth。
pmap + expand.grid 我得到了一些有趣的东西,但它使结构变平并删除了名称:
b=expand.grid(variable=c("A", "B", "C"), model=c("m0", "m1"), type=c("absolute", "relative"))
a=b %>% pmap(~{paste(..1,..2,..3)}) #a simple list of length 12
在最好的情况下,该函数甚至可以在 map 调用中使用名称 (variable, model, type)(而不是 ..1,..2,..3 用于 pmap)。
有没有办法得到这个?
【问题讨论】:
-
variable %>% set_names %>% map(~ model) %>% map(set_names) %>% map_depth(2,~ type) %>% map_depth(2, set_names)得到你想要的结构,但添加map_depth(3, cross3(type, model, variable) %>% map(rev) %>% map(paste, collapse=" "))不起作用,原因不明