2016-07-02 5 views
2

私はRの背景から来ているので、私はRの*適用ファミリの関数に慣れています。R's MapplyのScalaに相当する?

Scalaのlist.foreach(_.fun)list.map(_.fun)の関数は、リストの各要素に対して繰り返し実行するという点で、Rのlapply(list, fun)関数と非常によく似ています。

しかし、Rにはまた、複数のリストがあり、それぞれの最初の要素、それぞれの2番目の要素などの関数を適用する場合に便利な、関数mapply(fun, list1, list2, ...)があります。たとえば、私が関数add(x, y, z)を持っていて、2つのリストx=(1, 2, 3),y=(2, 3, 4)、およびz=(3, 4, 5)の場合、mapply(add, x, y, z)(6, 9, 12)を返します。

forループを使用せずにScalaにRのmapplyと同等のものがありますか?

+0

誰かがこの質問が下落した理由を説明できますか?私は簡単にGoogleができず、Stack Overflowで重複していないようなプログラミングに関する質問をしています。コメントなしでダウン投票することはコミュニティに貢献しません。 – Shuklaswag

+0

私はあなたにdownvoteをしませんでしたが、私もコメントのないdownvotesを嫌い、私はあなたの記事を閉じるために人々が投票している理由を知るのに十分な担当者を持っています。彼らは、「本、ツール、ソフトウェアライブラリ、チュートリアル、または他のオフサイトリソースを推薦するか、見つけることを尋ねる質問は、批判的な回答と迷惑メールを引き付ける傾向があるため、問題を説明し、それを解決するためにこれまでに何が行われているか」 –

+0

これについてはどうすればいいですか:https://dahl.byu.edu/software/rscala/rscala-jss.pdf。 Scalaで 'mapply'を使うことができます! –

答えて

2

は、標準ライブラリには類似のルーチンはありませんが、近くに取得することができます。

scala> List(List(1,2,3),List(5,6,7),List(14,13,12)).transpose 
res3: List[List[Int]] = List(List(1, 5, 14), List(2, 6, 13), List(3, 7, 12)) 

scala> List(List(1,2,3),List(5,6,7),List(14,13,12)).transpose.map(_.sum) 
res4: List[Int] = List(20, 21, 22) 

注:transposeは、すべてのサブコレクションは、同じサイズを持っている必要があり。あなたのコメントへ


フォロー

zippedがわかりません。これは、タプル(Tuple2)の中の2つのサブコレクションをタプルの単一のコレクションに変換します。それぞれのタプルは、与えられたタイプの2つのパラメータを取る関数に与えられます。これは、Tuple3の中の3つのサブコレクションでも利用でき、トリプルのコレクションになりますが、それは限界です。

また、なぜ「zippedが2つではなく1つの関数呼び出しであると思うかわかりません。 Richard Scriven氏がコメントで提案したlinkに従って、提供された2つのソリューションを比較すると、同じ数のステップ/ステートメントがあることがわかります。

私はそれを見ると、長所/短所の内訳は以下の通り:

  • を使用すると、さまざまな種類のコレクションを扱っている場合は、Seq[Int]Seq[Char]を言う、そしてあなたが適用する前にそれらをzipped取得したいと思いますf(i1,c1)、次にf(i2,c2)f(i3,c3)など
  • いずれのアプローチも、異なるサイズのサブコレクションをうまく処理しません。 transposeは例外をスローしますが、zippedは、最小のサブコレクションのmax-indexを超えるすべての要素を無視します。
  • "combiner"関数が3つ以上の引数を取る場合、zippedは使用できません。
  • "コンバイナ"が入力としてコレクションを受け取る場合は、transposeがおそらくより良い/より簡単なオプションです。
+0

賢い解決策!このソリューションが 'zipped'を使うよりも優れているかどうか知っていますか?最終結果は同じですが、 'zipped'は2つではなく1つの関数呼び出しです。 – Shuklaswag

+0

提供された回答に「zipped」の評価が追加されました。 – jwvh

関連する問題