2017-09-01 16 views
3

は、私は2つの引数と二つのリストpurrr(同時にではありません)で2つのリストを繰り返し処理できますか?

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

をとる関数f(x,y)は私が1つの要素のすべての組み合わせを繰り返すことができますpurrr機能があります持っていることを考えてみましょうx_varと1つの要素y_var?それは、など

、あるf(x,a)をやって、f(x,b)f(y,a)f(y,b)通常の解決策は、ループを記述することですが、おそらくpurrrと(ここでは、より簡潔があるのだろうか。

ありがとう!

答えて

8

に巣があなたの通話することができます:

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

あなたは0と一緒にcross*機能のいずれかを使用することができ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

nice trick my man –

3

x_vary_varは原子ベクターまたは配列であり、機能が既知の長さの原子ベクトルを返し、あなたがベースを使用できる場合、基地R機能expand.grid機能はここ

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

ありがとう!救助へのベースR –

3

動作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

素敵な!私はそれが均等にあるかどうか疑問に思いますか?私はそれの出力行列が好きです –