2017-09-27 5 views
0

Rを初めて使用し、mapply()の動作を理解しようとしています。 私は2つのデータフレームk1とk2を持っています。 rbind(k1、k2)を使用すると、k1の最後にk2が追加されます。 しかし、mapply(rbind、k1、k2)に沿って使用すると、k1から1row、k2から他のものが追加され、追加されます。 mapply()を使用してk2の後にk1を追加することは可能ですか? mapply()がリアルタイムシナリオで使用される時期についても説明できますか?mapply()のrbind()は、Rで新しい出力を返します。

> k1 <- data.frame(x1 = 1:10, x2 = 11:20) 
> k2 <- data.frame(x1= 21:30, x2 = 31:40) 
> 
> rbind(k1,k2) 
    x1 x2 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 
11 21 31 
12 22 32 
13 23 33 
14 24 34 
15 25 35 
16 26 36 
17 27 37 
18 28 38 
19 29 39 
20 30 40 
> mapply(rbind,k1,k2) 
     x1 x2 
[1,] 1 11 
[2,] 21 31 
[3,] 2 12 
[4,] 22 32 
[5,] 3 13 
[6,] 23 33 
[7,] 4 14 
[8,] 24 34 
[9,] 5 15 
[10,] 25 35 
[11,] 6 16 
[12,] 26 36 
[13,] 7 17 
[14,] 27 37 
[15,] 8 18 
[16,] 28 38 
[17,] 9 19 
[18,] 29 39 
[19,] 10 20 
[20,] 30 40 

最初の出力と同様にmapply()関数を使用して出力します。

そのような Reduce使用
dfList <- list(k1,k2) 

そしてrbind

Reduce(rbind, dfList) 

そして、別の方法を使用すると、データフレームのリストを作成し、その代わりmapply()

を悪用することができるようですね

+0

'rbind(k2、k1)'? – useR

+1

関数を何度も適用する場合は、マップとマップが使用されます。詳細は 'example(mapply)'と '?mapply'と入力してください。私の意見では、「私にこの機能が良いものの例を教えてください?ここでSO、btwを尋ねるのに適していません。これは一般的に具体的なプログラミング問題のサイトです。 – Frank

答えて

0

mapply​​とk2が共にデータフレームであるのでそう等、第1の入力および第2の入力の最初の要素の最初の要素、第一の入力と第2入力の第2の要素の第2要素に関数を適用し、mapply(rbind, k1, k2)rbindの最初の列​​の最初の列k2などとなります。次に、出力を行列に単純化します。

あなたがこの方法でmapplyを使用する場合は、非簡易版(mapply(f, ..., SIMPLIFY = FALSE))を使用し、単一の要素のリストを提供したいと思う、これはmapplyrbindからデータフレームはなく、出力リストを簡素化強制:

mapply(rbind, list(k1), list(k2), SIMPLIFY = FALSE) 

これにより、正しいバインディングが得られますが、結果は1つの要素のリストになります。

[[1]] 
    x1 x2 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 
11 21 31 
12 22 32 
13 23 33 
14 24 34 
15 25 35 
16 26 36 
17 27 37 
18 28 38 
19 29 39 
20 30 40 

次はあなたrbind(k1, k2)と同じ結果与えるだろう:@ Mako212、Reducedo.callで述べたように、この場合に使用するためのより良いツールかもしれません

unlist(mapply(rbind, list(k1), list(k2), SIMPLIFY = FALSE)) 

を。

0

do.call("rbind",dfList) 
+0

ありがとう、あなたの答えです。 mapply()関数を使用する利点は何か、そしてどのシナリオを使用するのか説明できますか? – Moni

+0

2つ以上の変数 'function(x、y){x + y}'の関数を持ち、その関数をxとyの値のリストに適用したいときは 'mapply'を使います。 'mapply(function(x、y){x + y}、x = df1 $ a、y = df1 $ b)'です。 'mapply'は各リストを反復し、あなたの例で' rbind'に渡します。 – Mako212

関連する問題