web-dev-qa-db-ja.com

Rに `<-`と`-> `の2つの代入演算子があるのはなぜですか?

<-->の使用方法を知っていて、そこに areseveralwriteupsequals割り当てと矢印割り当ての違いについてですが、->よりも_<-を優先するタイミングはわかりません。

割り当てのために<-を使用することで、コミュニティが合体したようです。

グーグル Rスタイルガイド もハドリーウィッカム tidyverse Rスタイルガイド 割り当てセクションで->に言及することもできます。

S/S-PLUS開発者が右矢印割り当て演算子->を使用するようになった設計上の考慮事項に興味があります。 ->または<-と比較して、=を使用する設定の方が読みやすい(または入力しやすい)と見なされますか?

私は、正しい割り当てのセマンティクスを許可する他の言語に精通していません。この点でどの言語がRに影響を与えましたか?

私は本/初期設計文書/ユーザーマニュアル/アーカイブされたメーリングリストまたは他の参考文献を引用して、S作者/設計者の意図が前方矢印割り当て演算子に入れることを確立するための答えを探しています。

43
Haleemur Ali

The New S Language(Becker、Chambers and Wilks 1988)の演習への回答から、Googleブックスを介して:

最後に結果を保存することをお勧めすることだけを覚えておくために長い式を入力する場合、右矢印を使用すると、行を再入力せずに割り当てを実行できます。

これは、Sユーザーが最新の [〜#〜] repl [〜#〜] /interactive環境で利用可能な行編集機能なしで、コンソールで直接作業していたことを示唆しています。


考古学:Googleブックスの基礎資料を調べました。 3つの関連書籍があります。

  • ブラウンブック:S:データ分析とグラフィックスのためのインタラクティブ環境R. A.ベッカー、J。M.チェンバーズ(CRC Press、1984)
  • Sシステムの拡張、Becker and Chambers(Taylor&Francis、1985)
  • ブルーブック:The New S LanguageBecker、Chambers and Wilks(Wadsworth and Brooks/Cole 1988、but reissued by 2018 !! by CRC Press)

    1. ブラウンブックでは->本文内:

enter image description here

しかし、それは付録にあります:

enter image description here

  1. Sシステムの拡張->本文内:

enter image description here

この本をあまり検索できないので、->は、付録のどこかに記載されている場合があります。

  1. ブルーブックは右矢印を指しますが、実際にはタイプミスがあるようです:

enter image description here

下線付きの赤い文章は、最初の下線付きの行にタイプミスがあり、->ではなく←...

上記の演習の答えのスクリーンショットを次に示します。

enter image description here

1985年の書籍のコピーが必要な場合は、34.41ドルまたは1070.99ドルで入手できます(ただし、送料無料です!)...

enter image description here

49
Ben Bolker

左から右への割り当てを許可するRの理由を推測することはできません。 mostプログラミング言語(実際にはほとんどすべて)が右から左への割り当てのみを実行することは確かに真実です。

とはいえ、Rはそれだけではありません。

私は、正しい割り当てのセマンティクスを許可する他の言語に精通していません。

私はそれを可能にする少なくとも3つの他の(家族の)言語を考えることができます:

  • アセンブリ言語は、しばしば左から右への割り当てを実行します。たとえば、影響力のあるAT&T構文は、次のような割り当てを記述します。

    movl $1, %eax
    

    これにより、値1をEAXレジスタに追加します。 (一方、Intelのx86構文は右から左への割り当てを実行します。)

  • TI-BASICのSTO(「ストア」)オペレーションは次のように記述されます。

    1→A
    
  • COBOLは、複数の形式の左から右への割り当てを使用します。

    MOVE 1 TO x
    ADD 2 TO x
    

    等.

しかし、これらの言語のいずれかがRの割り当て構文のインスピレーションになったかどうかは疑問です。対照的に、APLプログラミング言語は矢印割り当てを使用し、S(したがって間接的にR)がthat;からインスピレーションを得たと一般に受け入れられています。ただし、APLは右から左への割り当て(var ← value)。

9
Konrad Rudolph

個人的な好みの問題だと思います。

->はmagrittrパイプに先行していましたが、最近の使用例の1つは、->を使用して、そのようなパイプで左から右へのフローを維持できることです。

library(magrittr)
input %>% fun1 %>% fun2 -> result

一方、<-が主に使用される場合、その場合でも<-を使用することもできます。

<-の引数は、特に結果変数に適切な名前が付けられている場合に、設定されている値で行を開始することです。一方、右側はメカニズムなどです。結果に従属する詳細であり、概要から始めて、後で詳細に取り掛かるのが好きです。以下では、パラメータkを定義しています。 3であるか、ここでのように定数で定義されているか、複雑な式がステートメントの目的に付随しているように見えます。

k <- 3

個人的には、->は使用しません。

9
G. Grothendieck

Rは、数学を表現するのにかなり自然な構文を持つことを意図しています。 ->は、実際にはマトリックスの一部の 基本的な行操作 を記述する際の一般的な表記法です。例えば、 s*R_i -> R_iは、行iをs×行iで置き換える操作を示すために使用されます。何かのようなもの 2*A[1,] -> A[1,]は完全に有効なRです。これらの考慮事項が設計上の決定と関係があるかどうかはわかりませんが、数学言語にとって妥当な選択であることを示しています。

7
John Coleman