2017-11-03 7 views
0

関数のパラメータと部分的に一致するリストを渡したいと思います。ここでPassing list of named parameters to function?関数のパラメータに部分的に一致するように引数のリストを渡すにはどうすればよいですか?

mapply(FUN, ...)を呼び出すと...に一つずつ渡されるデータフレームの列を必要とする場合、(https://stackoverflow.com/a/15059219/2109289から取られた)の例である:

> df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6)) 
> df 
    x y z 
1 1 3 5 
2 2 4 6 
> mapply(function(x,y) x+y, df$x, df$z) 
[1] 6 8 
私はここ do.call方法として同等の簡素化の構文を探しています

データフレームdf[, c("x", "z")]を引数として渡すだけでいいのではないでしょうか?

例えば:

df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6)) 
do.call(function(x, y) mapply(function(x,y) x+y, x, y), unname(df[, c("x", "z")])) 
# [1] 6 8 
do.call(function(...) mapply(function(x,y) x+y, list(...)[[1]], list(...)[[2]]), df[, c("x", "z")]) 
# [1] 6 8 

これを行う代わりに、do.callに渡されるクロージャを作成するためのより良い方法はありますか?

答えて

2

1つのオプション

unlist(do.call(Map, c(f = `+`, df[c('x', 'z')]))) 
#[1] 6 8 

またはmapply

do.call(mapply, c(FUN = `+`, df[c('x', 'z')])) 
#[1] 6 8 
+1

または 'do.callを使用することになる( "+"、[C( "X"、 "Z")] DF)' – baptiste

+0

@baptisteまたは 'Reduce( '+'、df [c( 'x'、 'z')]) ' – akrun

+0

ありがとう、役に立つと思われますが、これがより一般的な機能をどのように保持するかはわかりません。すなわち、一般関数 'f < - function(x1、x2、x3、...)'に対して、 'f(x1、x2、arg_list)'のように呼び出すことができます。 – Alex

関連する問題