2017-09-01 56 views
3

想想看,我有一个函数f(x,y),它有两个参数,两个列表我们可以用purrr(不是同时)迭代两个列表吗?

  • x_var = list('x','y','z')
  • y_var = list('a','b')

是否有一个purrr功能,让我来遍历一个元素的每个组合x_vary_var中的一个元素?也就是说,做f(x,a)f(x,b)f(y,a)f(y,b)

通常的解决办法是写一个循环,但我不知道是否有更简洁这里(可能与purrr

谢谢!

回答

8

电话可以使用的cross*功能之一0沿:

map(cross2(x_var, y_var), unlist) 
3

可以嵌套你到map

library(purrr) 
map(x_var, function(x) { 
    map(y_var, paste, x) 
}) 
[[1]] 

[[1]][[1]] 
[1] "a x" 

[[1]][[2]] 
[1] "b x" 


[[2]] 
[[2]][[1]] 
[1] "a y" 

[[2]][[2]] 
[1] "b y" 


[[3]] 
[[3]][[1]] 
[1] "a z" 

[[3]][[2]] 
[1] "b z" 
+0

不错的把戏我的男人 –

3

碱基r功能expand.grid功能在这里工作

expand.grid(x=x_var, y=y_var) %>% {paste(.$x, .$y)} 
+0

谢谢!基地R救援 –

3

如果x_vary_var是原子矢量或阵列,且函数返回已知长度的原子矢量,可以使用碱一个R函数outer

outer(x_var, y_var, FUN = f) 

这将返回一个阵列dimensi ons c(dim(x_var), dim(y_var))。维度名称的组合类似。例如:

x_var <- setNames(1:3, c("a", "b", "c")) 
y_var <- setNames(4:5, c("d", "e")) 
outer(x_var, y_var, '+') 
# d e 
# a 5 6 
# b 6 7 
# c 7 8 
+0

不错的一个!我想知道是否有相同的反义词?我喜欢它的输出矩阵 –

相关问题